From 056db015460cc46b0aaf14a870ceffc0a35ccc5e Mon Sep 17 00:00:00 2001 From: ashwinibintel Date: Thu, 1 Aug 2024 17:51:05 +0000 Subject: [PATCH] Fourth contribution to O-RAN oran_k_release_v1.0 Features from FlexRan 23.07 released baseline with update Change-Id: I7112d4db56fcaa8d4f6854b82390fc5448372622 Signed-off-by: ashwinibintel --- Dockerfile | 124 +- fhi_lib/app/Makefile | 76 +- fhi_lib/app/gen_test.m | 246 +- fhi_lib/app/pcie_addresses.sh | 119 + fhi_lib/app/run_o_du.sh | 11 +- fhi_lib/app/run_o_ru.sh | 13 +- fhi_lib/app/src/app_bbu_main.c | 434 +- fhi_lib/app/src/app_bbu_pool.c | 464 +- fhi_lib/app/src/app_bbu_pool.h | 47 +- fhi_lib/app/src/app_dl_bbu_pool_tasks.c | 62 +- fhi_lib/app/src/app_io_fh_xran.c | 3558 ++++++----- fhi_lib/app/src/app_io_fh_xran.h | 86 +- fhi_lib/app/src/app_profile_xran.c | 86 +- fhi_lib/app/src/app_ul_bbu_pool_tasks.c | 705 +- fhi_lib/app/src/common.c | 213 +- fhi_lib/app/src/common.h | 72 +- fhi_lib/app/src/config.c | 510 +- fhi_lib/app/src/config.h | 110 +- fhi_lib/app/src/sample-app.c | 1926 ++++-- fhi_lib/app/src/xran_mlog_task_id.h | 769 ++- .../cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu0_10mhz/112/config_file_o_du.dat | 163 + .../cat_a/mu0_10mhz/112/config_file_o_ru.dat | 213 + .../app/usecase/cat_a/mu0_10mhz/112/usecase_du.cfg | 68 + .../usecase/cat_a/mu0_10mhz/112/usecase_du2.cfg | 70 + .../usecase/cat_a/mu0_10mhz/112/usecase_du_icx.cfg | 69 + .../cat_a/mu0_10mhz/112/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_a/mu0_10mhz/112/usecase_ru.cfg | 68 + .../usecase/cat_a/mu0_10mhz/112/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu0_10mhz/112/usecase_ru_icx.cfg | 68 + .../cat_a/mu0_10mhz/112/usecase_ru_icx2.cfg | 70 + .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du.xml | 4 +- .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru.xml | 12 +- .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu0_10mhz/12/config_file_o_du.dat | 4 - .../cat_a/mu0_10mhz/12/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu0_10mhz/12/usecase_du.cfg | 22 +- .../app/usecase/cat_a/mu0_10mhz/12/usecase_du2.cfg | 53 + .../usecase/cat_a/mu0_10mhz/12/usecase_du_icx2.cfg | 53 + .../app/usecase/cat_a/mu0_10mhz/12/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_10mhz/12/usecase_ru2.cfg | 71 + .../usecase/cat_a/mu0_10mhz/12/usecase_ru_icx2.cfg | 71 + .../usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu0_10mhz/config_file_o_du.dat | 4 - .../usecase/cat_a/mu0_10mhz/config_file_o_ru.dat | 4 - fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_10mhz/usecase_du2.cfg | 71 + .../usecase/cat_a/mu0_10mhz/usecase_du_icx2.cfg | 71 + fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_10mhz/usecase_ru2.cfg | 71 + .../usecase/cat_a/mu0_10mhz/usecase_ru_icx2.cfg | 71 + .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du.xml | 6 +- .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx.xml | 65 + .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru.xml | 14 +- .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu0_20mhz/12/config_file_o_du.dat | 4 - .../cat_a/mu0_20mhz/12/config_file_o_du_0.dat | 19 +- .../cat_a/mu0_20mhz/12/config_file_o_du_1.dat | 19 +- .../cat_a/mu0_20mhz/12/config_file_o_ru.dat | 4 - .../cat_a/mu0_20mhz/12/config_file_o_ru_0.dat | 19 +- .../cat_a/mu0_20mhz/12/config_file_o_ru_1.dat | 19 +- .../app/usecase/cat_a/mu0_20mhz/12/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/12/usecase_du2.cfg | 71 + .../usecase/cat_a/mu0_20mhz/12/usecase_du_icx.cfg | 71 + .../usecase/cat_a/mu0_20mhz/12/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_a/mu0_20mhz/12/usecase_ru.cfg | 7 +- .../app/usecase/cat_a/mu0_20mhz/12/usecase_ru2.cfg | 71 + .../usecase/cat_a/mu0_20mhz/12/usecase_ru_icx2.cfg | 71 + .../cat_a/mu0_20mhz/20/config_file_o_du.dat | 4 - .../cat_a/mu0_20mhz/20/config_file_o_ru.dat | 6 +- .../app/usecase/cat_a/mu0_20mhz/20/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/20/usecase_du2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/20/usecase_du_icx2.cfg | 82 + .../app/usecase/cat_a/mu0_20mhz/20/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_20mhz/20/usecase_ru2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/20/usecase_ru_icx2.cfg | 82 + .../cat_a/mu0_20mhz/21/config_file_o_du.dat | 4 - .../cat_a/mu0_20mhz/21/config_file_o_ru.dat | 6 +- .../app/usecase/cat_a/mu0_20mhz/21/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/21/usecase_du2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/21/usecase_du_icx2.cfg | 82 + .../app/usecase/cat_a/mu0_20mhz/21/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_20mhz/21/usecase_ru2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/21/usecase_ru_icx2.cfg | 82 + .../cat_a/mu0_20mhz/22/config_file_o_du.dat | 4 - .../cat_a/mu0_20mhz/22/config_file_o_ru.dat | 6 +- .../app/usecase/cat_a/mu0_20mhz/22/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/22/usecase_du2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/22/usecase_du_icx2.cfg | 82 + .../app/usecase/cat_a/mu0_20mhz/22/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_20mhz/22/usecase_ru2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/22/usecase_ru_icx2.cfg | 82 + .../cat_a/mu0_20mhz/23/config_file_o_du.dat | 4 - .../cat_a/mu0_20mhz/23/config_file_o_ru.dat | 6 +- .../app/usecase/cat_a/mu0_20mhz/23/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/23/usecase_du2.cfg | 81 + .../usecase/cat_a/mu0_20mhz/23/usecase_du_icx2.cfg | 81 + .../app/usecase/cat_a/mu0_20mhz/23/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_20mhz/23/usecase_ru2.cfg | 81 + .../usecase/cat_a/mu0_20mhz/23/usecase_ru_icx2.cfg | 81 + .../cat_a/mu0_20mhz/24/config_file_o_du.dat | 132 + .../cat_a/mu0_20mhz/24/config_file_o_ru.dat | 139 + .../app/usecase/cat_a/mu0_20mhz/24/usecase_du.cfg | 80 + .../app/usecase/cat_a/mu0_20mhz/24/usecase_du2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/24/usecase_du_icx2.cfg | 82 + .../app/usecase/cat_a/mu0_20mhz/24/usecase_ru.cfg | 80 + .../app/usecase/cat_a/mu0_20mhz/24/usecase_ru2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/24/usecase_ru_icx2.cfg | 82 + .../usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu0_20mhz/config_file_o_du.dat | 4 - .../usecase/cat_a/mu0_20mhz/config_file_o_ru.dat | 6 +- fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu0_20mhz/usecase_du2.cfg | 71 + .../usecase/cat_a/mu0_20mhz/usecase_du_icx2.cfg | 71 + fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu0_20mhz/usecase_ru2.cfg | 71 + .../usecase/cat_a/mu0_20mhz/usecase_ru_icx2.cfg | 71 + .../cat_a/mu0_50mhz/20/config_file_o_du.dat | 132 + .../cat_a/mu0_50mhz/20/config_file_o_ru.dat | 139 + .../app/usecase/cat_a/mu0_50mhz/20/usecase_du.cfg | 80 + .../app/usecase/cat_a/mu0_50mhz/20/usecase_du2.cfg | 82 + .../usecase/cat_a/mu0_50mhz/20/usecase_du_icx2.cfg | 82 + .../app/usecase/cat_a/mu0_50mhz/20/usecase_ru.cfg | 80 + .../app/usecase/cat_a/mu0_50mhz/20/usecase_ru2.cfg | 82 + .../usecase/cat_a/mu0_50mhz/20/usecase_ru_icx2.cfg | 82 + .../usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du.xml | 65 + .../usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_50mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru.xml | 65 + .../usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_50mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml | 8 +- .../usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu0_5mhz/config_file_o_du.dat | 4 - .../usecase/cat_a/mu0_5mhz/config_file_o_ru.dat | 6 +- fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du.cfg | 4 +- fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du2.cfg | 71 + .../app/usecase/cat_a/mu0_5mhz/usecase_du_icx2.cfg | 71 + fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru.cfg | 5 +- fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru2.cfg | 71 + .../app/usecase/cat_a/mu0_5mhz/usecase_ru_icx2.cfg | 71 + .../cat_a/mu1_100mhz/101/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/101/config_file_o_ru.dat | 4 +- .../usecase/cat_a/mu1_100mhz/101/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/101/usecase_du2.cfg | 72 + .../cat_a/mu1_100mhz/101/usecase_du_icx2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/101/usecase_ru.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/101/usecase_ru2.cfg | 70 + .../cat_a/mu1_100mhz/101/usecase_ru_icx2.cfg | 70 + .../cat_a/mu1_100mhz/102/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/102/config_file_o_ru.dat | 4 +- .../usecase/cat_a/mu1_100mhz/102/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/102/usecase_du2.cfg | 72 + .../cat_a/mu1_100mhz/102/usecase_du_icx2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/102/usecase_ru.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/102/usecase_ru2.cfg | 70 + .../cat_a/mu1_100mhz/102/usecase_ru_icx2.cfg | 70 + .../cat_a/mu1_100mhz/104/config_file_o_du.dat | 136 + .../cat_a/mu1_100mhz/104/config_file_o_du_0.dat | 133 + .../cat_a/mu1_100mhz/104/config_file_o_ru.dat | 151 + .../cat_a/mu1_100mhz/104/config_file_o_ru_0.dat | 146 + .../usecase/cat_a/mu1_100mhz/104/usecase_du.cfg | 78 + .../usecase/cat_a/mu1_100mhz/104/usecase_du2.cfg | 81 + .../cat_a/mu1_100mhz/104/usecase_du_icx2.cfg | 81 + .../usecase/cat_a/mu1_100mhz/104/usecase_ru.cfg | 70 + .../usecase/cat_a/mu1_100mhz/104/usecase_ru2.cfg | 72 + .../cat_a/mu1_100mhz/104/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_100mhz/1044/config_file_o_du.dat | 135 + .../cat_a/mu1_100mhz/1044/config_file_o_du_0.dat | 131 + .../cat_a/mu1_100mhz/1044/config_file_o_ru.dat | 151 + .../cat_a/mu1_100mhz/1044/config_file_o_ru_0.dat | 146 + .../usecase/cat_a/mu1_100mhz/1044/usecase_du.cfg | 103 + .../usecase/cat_a/mu1_100mhz/1044/usecase_du2.cfg | 103 + .../cat_a/mu1_100mhz/1044/usecase_du_icx2.cfg | 103 + .../usecase/cat_a/mu1_100mhz/1044/usecase_ru.cfg | 92 + .../usecase/cat_a/mu1_100mhz/1044/usecase_ru2.cfg | 93 + .../cat_a/mu1_100mhz/1044/usecase_ru_icx2.cfg | 93 + .../cat_a/mu1_100mhz/1046/config_file_o_du.dat | 144 + .../cat_a/mu1_100mhz/1046/config_file_o_du_0.dat | 141 + .../cat_a/mu1_100mhz/1046/config_file_o_ru.dat | 174 + .../cat_a/mu1_100mhz/1046/config_file_o_ru_0.dat | 175 + .../usecase/cat_a/mu1_100mhz/1046/usecase_du.cfg | 80 + .../usecase/cat_a/mu1_100mhz/1046/usecase_du2.cfg | 83 + .../cat_a/mu1_100mhz/1046/usecase_du_icx2.cfg | 83 + .../usecase/cat_a/mu1_100mhz/1046/usecase_ru.cfg | 70 + .../usecase/cat_a/mu1_100mhz/1046/usecase_ru2.cfg | 72 + .../cat_a/mu1_100mhz/1046/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_100mhz/114/config_file_o_du.dat | 123 + .../cat_a/mu1_100mhz/114/config_file_o_ru.dat | 126 + .../usecase/cat_a/mu1_100mhz/114/usecase_du.cfg | 53 + .../usecase/cat_a/mu1_100mhz/114/usecase_du2.cfg | 55 + .../cat_a/mu1_100mhz/114/usecase_du_icx2.cfg | 55 + .../usecase/cat_a/mu1_100mhz/114/usecase_ru.cfg | 51 + .../usecase/cat_a/mu1_100mhz/114/usecase_ru2.cfg | 53 + .../cat_a/mu1_100mhz/114/usecase_ru_icx2.cfg | 53 + .../cat_a/mu1_100mhz/2/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/2/config_file_o_ru.dat | 2 - .../app/usecase/cat_a/mu1_100mhz/2/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu1_100mhz/2/usecase_du2.cfg | 71 + .../usecase/cat_a/mu1_100mhz/2/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_a/mu1_100mhz/2/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu1_100mhz/2/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu1_100mhz/2/usecase_ru_icx2.cfg | 70 + .../cat_a/mu1_100mhz/201/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/201/config_file_o_ru.dat | 4 +- .../usecase/cat_a/mu1_100mhz/201/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/201/usecase_du2.cfg | 73 + .../cat_a/mu1_100mhz/201/usecase_du_icx2.cfg | 73 + .../usecase/cat_a/mu1_100mhz/201/usecase_ru.cfg | 5 +- .../usecase/cat_a/mu1_100mhz/201/usecase_ru2.cfg | 72 + .../cat_a/mu1_100mhz/201/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du.xml | 2 +- .../cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/202/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/202/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/202/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/202/config_file_o_ru_1.dat | 4 +- .../usecase/cat_a/mu1_100mhz/202/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/202/usecase_du2.cfg | 75 + .../cat_a/mu1_100mhz/202/usecase_du_icx2.cfg | 75 + .../usecase/cat_a/mu1_100mhz/202/usecase_ru.cfg | 5 +- .../usecase/cat_a/mu1_100mhz/202/usecase_ru2.cfg | 73 + .../cat_a/mu1_100mhz/202/usecase_ru_icx2.cfg | 73 + .../cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du.xml | 2 +- .../cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/203/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/203/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/203/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/203/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/203/config_file_o_du_2.dat | 2 - .../cat_a/mu1_100mhz/203/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/203/config_file_o_ru_1.dat | 4 +- .../cat_a/mu1_100mhz/203/config_file_o_ru_2.dat | 4 +- .../usecase/cat_a/mu1_100mhz/203/usecase_du.cfg | 6 +- .../usecase/cat_a/mu1_100mhz/203/usecase_du2.cfg | 78 + .../cat_a/mu1_100mhz/203/usecase_du_icx2.cfg | 78 + .../usecase/cat_a/mu1_100mhz/203/usecase_ru.cfg | 7 +- .../usecase/cat_a/mu1_100mhz/203/usecase_ru2.cfg | 77 + .../cat_a/mu1_100mhz/203/usecase_ru_icx2.cfg | 77 + .../cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du.xml | 6 +- .../cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/204/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/204/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/204/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/204/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/204/config_file_o_du_2.dat | 2 - .../cat_a/mu1_100mhz/204/config_file_o_du_3.dat | 2 - .../cat_a/mu1_100mhz/204/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/204/config_file_o_ru_1.dat | 4 +- .../cat_a/mu1_100mhz/204/config_file_o_ru_2.dat | 4 +- .../cat_a/mu1_100mhz/204/config_file_o_ru_3.dat | 4 +- .../usecase/cat_a/mu1_100mhz/204/usecase_du.cfg | 6 +- .../usecase/cat_a/mu1_100mhz/204/usecase_du2.cfg | 85 + .../cat_a/mu1_100mhz/204/usecase_du_icx2.cfg | 85 + .../usecase/cat_a/mu1_100mhz/204/usecase_ru.cfg | 9 +- .../usecase/cat_a/mu1_100mhz/204/usecase_ru2.cfg | 85 + .../cat_a/mu1_100mhz/204/usecase_ru_icx2.cfg | 85 + .../cat_a/mu1_100mhz/3/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/3/config_file_o_ru.dat | 2 - .../app/usecase/cat_a/mu1_100mhz/3/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu1_100mhz/3/usecase_du2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/3/usecase_du_icx2.cfg | 72 + .../app/usecase/cat_a/mu1_100mhz/3/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu1_100mhz/3/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu1_100mhz/3/usecase_ru_icx2.cfg | 70 + .../cat_a/mu1_100mhz/401/config_file_o_du.dat | 2 - .../cat_a/mu1_100mhz/401/config_file_o_ru.dat | 4 +- .../usecase/cat_a/mu1_100mhz/401/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/401/usecase_du2.cfg | 72 + .../cat_a/mu1_100mhz/401/usecase_du_icx2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/401/usecase_ru.cfg | 5 +- .../usecase/cat_a/mu1_100mhz/401/usecase_ru2.cfg | 73 + .../cat_a/mu1_100mhz/401/usecase_ru_icx2.cfg | 73 + .../cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du.xml | 2 +- .../cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/402/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/402/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/402/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/402/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/402/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/402/config_file_o_ru_1.dat | 4 +- .../usecase/cat_a/mu1_100mhz/402/usecase_du.cfg | 4 +- .../usecase/cat_a/mu1_100mhz/402/usecase_du2.cfg | 74 + .../cat_a/mu1_100mhz/402/usecase_du_icx2.cfg | 74 + .../usecase/cat_a/mu1_100mhz/402/usecase_ru.cfg | 5 +- .../usecase/cat_a/mu1_100mhz/402/usecase_ru2.cfg | 73 + .../cat_a/mu1_100mhz/402/usecase_ru_icx2.cfg | 73 + .../cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du.xml | 6 +- .../cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/403/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/403/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/403/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/403/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/403/config_file_o_du_2.dat | 2 - .../cat_a/mu1_100mhz/403/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/403/config_file_o_ru_1.dat | 4 +- .../cat_a/mu1_100mhz/403/config_file_o_ru_2.dat | 4 +- .../usecase/cat_a/mu1_100mhz/403/usecase_du.cfg | 6 +- .../usecase/cat_a/mu1_100mhz/403/usecase_du2.cfg | 78 + .../cat_a/mu1_100mhz/403/usecase_du_icx2.cfg | 77 + .../usecase/cat_a/mu1_100mhz/403/usecase_ru.cfg | 10 +- .../usecase/cat_a/mu1_100mhz/403/usecase_ru2.cfg | 77 + .../cat_a/mu1_100mhz/403/usecase_ru_icx2.cfg | 76 + .../cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du.xml | 6 +- .../cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/404/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/404/bbu_pool_cfg_o_ru_icx2.xml | 64 + .../cat_a/mu1_100mhz/404/config_file_o_du_0.dat | 2 - .../cat_a/mu1_100mhz/404/config_file_o_du_1.dat | 2 - .../cat_a/mu1_100mhz/404/config_file_o_du_2.dat | 2 - .../cat_a/mu1_100mhz/404/config_file_o_du_3.dat | 2 - .../cat_a/mu1_100mhz/404/config_file_o_ru_0.dat | 4 +- .../cat_a/mu1_100mhz/404/config_file_o_ru_1.dat | 4 +- .../cat_a/mu1_100mhz/404/config_file_o_ru_2.dat | 4 +- .../cat_a/mu1_100mhz/404/config_file_o_ru_3.dat | 4 +- .../usecase/cat_a/mu1_100mhz/404/usecase_du.cfg | 6 +- .../usecase/cat_a/mu1_100mhz/404/usecase_du2.cfg | 85 + .../cat_a/mu1_100mhz/404/usecase_du_icx.cfg | 82 + .../cat_a/mu1_100mhz/404/usecase_du_icx2.cfg | 85 + .../usecase/cat_a/mu1_100mhz/404/usecase_ru.cfg | 9 +- .../usecase/cat_a/mu1_100mhz/404/usecase_ru2.cfg | 85 + .../cat_a/mu1_100mhz/404/usecase_ru_icx2.cfg | 85 + .../cat_a/mu1_100mhz/411/config_file_o_du.dat | 166 + .../cat_a/mu1_100mhz/411/config_file_o_ru.dat | 181 + .../usecase/cat_a/mu1_100mhz/411/usecase_du.cfg | 69 + .../usecase/cat_a/mu1_100mhz/411/usecase_du2.cfg | 72 + .../cat_a/mu1_100mhz/411/usecase_du_icx2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/411/usecase_ru.cfg | 69 + .../usecase/cat_a/mu1_100mhz/411/usecase_ru2.cfg | 71 + .../cat_a/mu1_100mhz/411/usecase_ru_icx2.cfg | 71 + .../cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/412/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/412/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/412/config_file_o_du_0.dat | 165 + .../cat_a/mu1_100mhz/412/config_file_o_du_1.dat | 165 + .../cat_a/mu1_100mhz/412/config_file_o_ru_0.dat | 181 + .../cat_a/mu1_100mhz/412/config_file_o_ru_1.dat | 181 + .../usecase/cat_a/mu1_100mhz/412/usecase_du.cfg | 71 + .../usecase/cat_a/mu1_100mhz/412/usecase_du2.cfg | 71 + .../cat_a/mu1_100mhz/412/usecase_du_icx.cfg | 71 + .../cat_a/mu1_100mhz/412/usecase_du_icx2.cfg | 70 + .../usecase/cat_a/mu1_100mhz/412/usecase_ru.cfg | 71 + .../usecase/cat_a/mu1_100mhz/412/usecase_ru2.cfg | 71 + .../cat_a/mu1_100mhz/412/usecase_ru_icx.cfg | 71 + .../cat_a/mu1_100mhz/412/usecase_ru_icx2.cfg | 71 + .../cat_a/mu1_100mhz/421/config_file_o_du.dat | 166 + .../cat_a/mu1_100mhz/421/config_file_o_ru.dat | 181 + .../usecase/cat_a/mu1_100mhz/421/usecase_du.cfg | 69 + .../usecase/cat_a/mu1_100mhz/421/usecase_du2.cfg | 71 + .../cat_a/mu1_100mhz/421/usecase_du_icx2.cfg | 71 + .../usecase/cat_a/mu1_100mhz/421/usecase_ru.cfg | 70 + .../usecase/cat_a/mu1_100mhz/421/usecase_ru2.cfg | 72 + .../cat_a/mu1_100mhz/421/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_100mhz/441/config_file_o_du.dat | 161 + .../cat_a/mu1_100mhz/441/config_file_o_ru.dat | 175 + .../usecase/cat_a/mu1_100mhz/441/usecase_du.cfg | 70 + .../usecase/cat_a/mu1_100mhz/441/usecase_du2.cfg | 73 + .../cat_a/mu1_100mhz/441/usecase_du_icx2.cfg | 73 + .../usecase/cat_a/mu1_100mhz/441/usecase_ru.cfg | 70 + .../usecase/cat_a/mu1_100mhz/441/usecase_ru2.cfg | 73 + .../cat_a/mu1_100mhz/441/usecase_ru_icx2.cfg | 73 + .../cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/443/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/443/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/443/config_file_o_du.dat | 161 + .../cat_a/mu1_100mhz/443/config_file_o_ru.dat | 175 + .../usecase/cat_a/mu1_100mhz/443/usecase_du.cfg | 75 + .../usecase/cat_a/mu1_100mhz/443/usecase_du2.cfg | 76 + .../cat_a/mu1_100mhz/443/usecase_du_icx2.cfg | 75 + .../usecase/cat_a/mu1_100mhz/443/usecase_ru.cfg | 73 + .../usecase/cat_a/mu1_100mhz/443/usecase_ru2.cfg | 76 + .../cat_a/mu1_100mhz/443/usecase_ru_icx2.cfg | 76 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx0.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx1.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx2.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx3.cfg | 13 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx4.cfg | 31 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx5.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx6.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx7.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx8.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumRx9.cfg | 31 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx0.cfg | 34 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx1.cfg | 34 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx2.cfg | 22 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx3.cfg | 23 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx4.cfg | 6 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx5.cfg | 23 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx6.cfg | 23 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx7.cfg | 23 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx8.cfg | 23 + .../app/usecase/cat_a/mu1_100mhz/5/SlotNumTx9.cfg | 6 + .../cat_a/mu1_100mhz/5/config_file_o_du.dat | 193 + .../cat_a/mu1_100mhz/5/config_file_o_ru.dat | 210 + .../app/usecase/cat_a/mu1_100mhz/5/usecase_du.cfg | 71 + .../app/usecase/cat_a/mu1_100mhz/5/usecase_du2.cfg | 73 + .../usecase/cat_a/mu1_100mhz/5/usecase_du_icx2.cfg | 73 + .../app/usecase/cat_a/mu1_100mhz/5/usecase_ru.cfg | 70 + .../app/usecase/cat_a/mu1_100mhz/5/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/5/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/801/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/801/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_a/mu1_100mhz/801/config_file_o_du.dat | 140 + .../cat_a/mu1_100mhz/801/config_file_o_ru.dat | 155 + .../usecase/cat_a/mu1_100mhz/801/usecase_du.cfg | 56 + .../usecase/cat_a/mu1_100mhz/801/usecase_du2.cfg | 59 + .../cat_a/mu1_100mhz/801/usecase_du_icx2.cfg | 59 + .../usecase/cat_a/mu1_100mhz/801/usecase_ru.cfg | 55 + .../usecase/cat_a/mu1_100mhz/801/usecase_ru2.cfg | 58 + .../cat_a/mu1_100mhz/801/usecase_ru_icx2.cfg | 58 + .../usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du.xml | 2 +- .../cat_a/mu1_100mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_a/mu1_100mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu1_100mhz/config_file_o_du.dat | 2 - .../usecase/cat_a/mu1_100mhz/config_file_o_ru.dat | 2 - .../app/usecase/cat_a/mu1_100mhz/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu1_100mhz/usecase_du2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/usecase_du_icx2.cfg | 72 + .../app/usecase/cat_a/mu1_100mhz/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu1_100mhz/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu1_100mhz/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu1_10mhz/1/config_file_o_du.dat | 162 + .../usecase/cat_a/mu1_10mhz/1/config_file_o_ru.dat | 161 + .../app/usecase/cat_a/mu1_10mhz/1/usecase_du.cfg | 51 + .../app/usecase/cat_a/mu1_10mhz/1/usecase_du2.cfg | 53 + .../usecase/cat_a/mu1_10mhz/1/usecase_du_icx2.cfg | 53 + .../app/usecase/cat_a/mu1_10mhz/1/usecase_ru.cfg | 69 + .../app/usecase/cat_a/mu1_10mhz/1/usecase_ru2.cfg | 71 + .../usecase/cat_a/mu1_10mhz/1/usecase_ru_icx2.cfg | 71 + .../cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_20mhz/1/mu0_config_file_o_du.dat | 141 + .../cat_a/mu1_20mhz/1/mu0_config_file_o_ru.dat | 170 + .../cat_a/mu1_20mhz/1/mu1_config_file_o_du.dat | 146 + .../cat_a/mu1_20mhz/1/mu1_config_file_o_ru.dat | 170 + .../app/usecase/cat_a/mu1_20mhz/1/usecase_du.cfg | 45 + .../app/usecase/cat_a/mu1_20mhz/1/usecase_du2.cfg | 46 + .../usecase/cat_a/mu1_20mhz/1/usecase_du_icx2.cfg | 46 + .../app/usecase/cat_a/mu1_20mhz/1/usecase_ru.cfg | 37 + .../app/usecase/cat_a/mu1_20mhz/1/usecase_ru2.cfg | 39 + .../usecase/cat_a/mu1_20mhz/1/usecase_ru_icx2.cfg | 39 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu1_60mhz/1/config_file_o_du.dat | 151 + .../usecase/cat_a/mu1_60mhz/1/config_file_o_ru.dat | 150 + .../app/usecase/cat_a/mu1_60mhz/1/usecase_du.cfg | 70 + .../app/usecase/cat_a/mu1_60mhz/1/usecase_du2.cfg | 73 + .../usecase/cat_a/mu1_60mhz/1/usecase_du_icx2.cfg | 73 + .../app/usecase/cat_a/mu1_60mhz/1/usecase_ru.cfg | 69 + .../app/usecase/cat_a/mu1_60mhz/1/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu1_60mhz/1/usecase_ru_icx2.cfg | 72 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru.xml | 65 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu1_80mhz/1/config_file_o_du.dat | 151 + .../usecase/cat_a/mu1_80mhz/1/config_file_o_ru.dat | 150 + .../app/usecase/cat_a/mu1_80mhz/1/usecase_du.cfg | 70 + .../app/usecase/cat_a/mu1_80mhz/1/usecase_du2.cfg | 73 + .../usecase/cat_a/mu1_80mhz/1/usecase_du_icx2.cfg | 73 + .../app/usecase/cat_a/mu1_80mhz/1/usecase_ru.cfg | 69 + .../app/usecase/cat_a/mu1_80mhz/1/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu1_80mhz/1/usecase_ru_icx2.cfg | 72 + .../cat_a/mu3_100mhz/1/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/1/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/1/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/1/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/1/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/1/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/1/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/1/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/101/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/101/config_file_o_ru.dat | 4 - .../usecase/cat_a/mu3_100mhz/101/usecase_du.cfg | 4 +- .../usecase/cat_a/mu3_100mhz/101/usecase_du2.cfg | 70 + .../cat_a/mu3_100mhz/101/usecase_du_icx2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/101/usecase_ru.cfg | 4 +- .../usecase/cat_a/mu3_100mhz/101/usecase_ru2.cfg | 70 + .../cat_a/mu3_100mhz/101/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/2/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/2/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/2/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/2/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/2/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/2/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/2/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/2/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/201/mu1_config_file_o_du.dat | 174 + .../cat_a/mu3_100mhz/201/mu1_config_file_o_ru.dat | 189 + .../cat_a/mu3_100mhz/201/mu3_config_file_o_du.dat | 173 + .../cat_a/mu3_100mhz/201/mu3_config_file_o_ru.dat | 190 + .../usecase/cat_a/mu3_100mhz/201/usecase_du.cfg | 69 + .../usecase/cat_a/mu3_100mhz/201/usecase_du2.cfg | 71 + .../cat_a/mu3_100mhz/201/usecase_du_icx2.cfg | 71 + .../usecase/cat_a/mu3_100mhz/201/usecase_ru.cfg | 69 + .../usecase/cat_a/mu3_100mhz/201/usecase_ru2.cfg | 71 + .../cat_a/mu3_100mhz/201/usecase_ru_icx2.cfg | 71 + .../cat_a/mu3_100mhz/3/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/3/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/3/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/3/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/3/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/3/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/3/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/3/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/4/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/4/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/4/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/4/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/4/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/4/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/4/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/4/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/5/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/5/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/5/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/5/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/5/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/5/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/5/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/5/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/6/config_file_o_du.dat | 4 - .../cat_a/mu3_100mhz/6/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/6/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/6/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/6/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/6/usecase_ru.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/6/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/6/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/7/config_file_o_du.dat | 24 +- .../cat_a/mu3_100mhz/7/config_file_o_ru.dat | 24 +- .../app/usecase/cat_a/mu3_100mhz/7/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/7/usecase_du2.cfg | 71 + .../usecase/cat_a/mu3_100mhz/7/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_a/mu3_100mhz/7/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu3_100mhz/7/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu3_100mhz/7/usecase_ru_icx2.cfg | 72 + .../cat_a/mu3_100mhz/8/config_file_o_du.dat | 166 + .../cat_a/mu3_100mhz/8/config_file_o_ru.dat | 180 + .../app/usecase/cat_a/mu3_100mhz/8/usecase_du.cfg | 68 + .../app/usecase/cat_a/mu3_100mhz/8/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/8/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/8/usecase_ru.cfg | 68 + .../app/usecase/cat_a/mu3_100mhz/8/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/8/usecase_ru_icx2.cfg | 70 + .../cat_a/mu3_100mhz/9/config_file_o_du.dat | 166 + .../cat_a/mu3_100mhz/9/config_file_o_ru.dat | 187 + .../app/usecase/cat_a/mu3_100mhz/9/usecase_du.cfg | 68 + .../app/usecase/cat_a/mu3_100mhz/9/usecase_du2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/9/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_a/mu3_100mhz/9/usecase_ru.cfg | 68 + .../app/usecase/cat_a/mu3_100mhz/9/usecase_ru2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/9/usecase_ru_icx2.cfg | 70 + .../usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du.xml | 2 +- .../cat_a/mu3_100mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_a/mu3_100mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_a/mu3_100mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_a/mu3_100mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_a/mu3_100mhz/config_file_o_du.dat | 4 - .../usecase/cat_a/mu3_100mhz/config_file_o_ru.dat | 4 - .../app/usecase/cat_a/mu3_100mhz/usecase_du.cfg | 4 +- .../app/usecase/cat_a/mu3_100mhz/usecase_du2.cfg | 72 + .../usecase/cat_a/mu3_100mhz/usecase_du_icx2.cfg | 72 + .../app/usecase/cat_a/mu3_100mhz/usecase_ru.cfg | 5 +- .../app/usecase/cat_a/mu3_100mhz/usecase_ru2.cfg | 72 + .../usecase/cat_a/mu3_100mhz/usecase_ru_icx2.cfg | 72 + .../app/usecase/cat_a_b/201/bbu_pool_cfg_o_du.xml | 75 + .../app/usecase/cat_a_b/201/bbu_pool_cfg_o_du2.xml | 75 + .../usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx.xml | 65 + .../usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx2.xml | 65 + .../app/usecase/cat_a_b/201/config_file_o_du0.dat | 166 + .../app/usecase/cat_a_b/201/config_file_o_du1.dat | 245 + .../app/usecase/cat_a_b/201/config_file_o_ru0.dat | 217 + .../app/usecase/cat_a_b/201/config_file_o_ru1.dat | 295 + fhi_lib/app/usecase/cat_a_b/201/usecase_du.cfg | 60 + fhi_lib/app/usecase/cat_a_b/201/usecase_du2.cfg | 61 + fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx.cfg | 60 + .../app/usecase/cat_a_b/201/usecase_du_icx2.cfg | 60 + fhi_lib/app/usecase/cat_a_b/201/usecase_ru.cfg | 61 + fhi_lib/app/usecase/cat_a_b/201/usecase_ru2.cfg | 61 + .../app/usecase/cat_a_b/201/usecase_ru_icx2.cfg | 61 + .../cat_b/mu1_100mhz/1/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/1/config_file_o_ru.dat | 32 +- .../app/usecase/cat_b/mu1_100mhz/1/usecase_du.cfg | 4 +- .../app/usecase/cat_b/mu1_100mhz/1/usecase_du2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/1/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_b/mu1_100mhz/1/usecase_ru.cfg | 5 +- .../app/usecase/cat_b/mu1_100mhz/1/usecase_ru2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/1/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/101/config_file_o_du.dat | 67 +- .../cat_b/mu1_100mhz/101/config_file_o_ru.dat | 132 +- .../usecase/cat_b/mu1_100mhz/101/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/101/usecase_du2.cfg | 72 + .../cat_b/mu1_100mhz/101/usecase_du_icx2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/101/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/101/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/101/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/102/config_file_o_du.dat | 68 +- .../cat_b/mu1_100mhz/102/config_file_o_ru.dat | 131 +- .../usecase/cat_b/mu1_100mhz/102/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/102/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/102/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/102/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/102/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/102/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/103/config_file_o_du.dat | 68 +- .../cat_b/mu1_100mhz/103/config_file_o_ru.dat | 130 +- .../usecase/cat_b/mu1_100mhz/103/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/103/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/103/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/103/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/103/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/103/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/104/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/104/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/104/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/104/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/104/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/104/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/104/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/104/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/105/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/105/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/105/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/105/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/105/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/105/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/105/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/105/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/106/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/106/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/106/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/106/usecase_du.cfg | 9 +- .../usecase/cat_b/mu1_100mhz/106/usecase_du2.cfg | 72 + .../cat_b/mu1_100mhz/106/usecase_du_icx.cfg | 69 + .../cat_b/mu1_100mhz/106/usecase_du_icx2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/106/usecase_ru.cfg | 9 +- .../usecase/cat_b/mu1_100mhz/106/usecase_ru2.cfg | 73 + .../cat_b/mu1_100mhz/106/usecase_ru_icx2.cfg | 73 + .../cat_b/mu1_100mhz/107/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/107/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/107/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/107/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/107/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/107/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/107/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/107/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/108/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/108/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/108/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/108/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/108/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/108/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/108/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/108/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/109/config_file_o_du.dat | 49 +- .../cat_b/mu1_100mhz/109/config_file_o_ru.dat | 176 +- .../usecase/cat_b/mu1_100mhz/109/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/109/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/109/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/109/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/109/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/109/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/111/config_file_o_du.dat | 207 + .../cat_b/mu1_100mhz/111/config_file_o_ru.dat | 232 + .../usecase/cat_b/mu1_100mhz/111/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/111/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/111/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/111/usecase_ru.cfg | 69 + .../usecase/cat_b/mu1_100mhz/111/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/111/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/112/config_file_o_du.dat | 207 + .../cat_b/mu1_100mhz/112/config_file_o_ru.dat | 229 + .../usecase/cat_b/mu1_100mhz/112/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/112/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/112/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/112/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/112/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/112/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/113/config_file_o_du.dat | 211 + .../cat_b/mu1_100mhz/113/config_file_o_ru.dat | 232 + .../usecase/cat_b/mu1_100mhz/113/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/113/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/113/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/113/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/113/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/113/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/114/config_file_o_du.dat | 231 + .../cat_b/mu1_100mhz/114/config_file_o_ru.dat | 266 + .../usecase/cat_b/mu1_100mhz/114/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/114/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/114/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/114/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/114/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/114/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/115/config_file_o_du.dat | 233 + .../cat_b/mu1_100mhz/115/config_file_o_ru.dat | 265 + .../usecase/cat_b/mu1_100mhz/115/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/115/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/115/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/115/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/115/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/115/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/116/config_file_o_du.dat | 239 + .../cat_b/mu1_100mhz/116/config_file_o_ru.dat | 270 + .../usecase/cat_b/mu1_100mhz/116/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/116/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/116/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/116/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/116/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/116/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/117/config_file_o_du.dat | 222 + .../cat_b/mu1_100mhz/117/config_file_o_ru.dat | 265 + .../usecase/cat_b/mu1_100mhz/117/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/117/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/117/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/117/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/117/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/117/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/118/config_file_o_du.dat | 219 + .../cat_b/mu1_100mhz/118/config_file_o_ru.dat | 265 + .../usecase/cat_b/mu1_100mhz/118/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/118/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/118/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/118/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/118/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/118/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/119/config_file_o_du.dat | 225 + .../cat_b/mu1_100mhz/119/config_file_o_ru.dat | 266 + .../usecase/cat_b/mu1_100mhz/119/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/119/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/119/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/119/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/119/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/119/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du.xml | 6 +- .../cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx.xml | 4 +- .../mu1_100mhz/142/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/142/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/142/peak_o_du_tst376.dat | 257 + .../cat_b/mu1_100mhz/142/peak_o_ru_tst376.dat | 297 + .../usecase/cat_b/mu1_100mhz/142/usecase_du.cfg | 16 +- .../usecase/cat_b/mu1_100mhz/142/usecase_du2.cfg | 66 + .../cat_b/mu1_100mhz/142/usecase_du_icx.cfg | 9 +- .../cat_b/mu1_100mhz/142/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/142/usecase_ru.cfg | 16 +- .../usecase/cat_b/mu1_100mhz/142/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/142/usecase_ru_icx.cfg | 13 +- .../cat_b/mu1_100mhz/142/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/1421/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/1421/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/1421/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/1421/peak_o_du_tst376.dat | 31 +- .../cat_b/mu1_100mhz/1421/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/1421/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/1421/usecase_du_icx.cfg | 6 +- .../cat_b/mu1_100mhz/1421/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/1421/usecase_ru.cfg | 3 +- .../usecase/cat_b/mu1_100mhz/1421/usecase_ru2.cfg | 60 + .../cat_b/mu1_100mhz/1421/usecase_ru_icx.cfg | 11 +- .../cat_b/mu1_100mhz/1421/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/152/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/152/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/152/config_file_o_du.dat | 283 + .../cat_b/mu1_100mhz/152/config_file_o_ru.dat | 334 + .../usecase/cat_b/mu1_100mhz/152/usecase_du.cfg | 60 + .../usecase/cat_b/mu1_100mhz/152/usecase_du2.cfg | 60 + .../cat_b/mu1_100mhz/152/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/152/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/152/usecase_ru.cfg | 61 + .../usecase/cat_b/mu1_100mhz/152/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/152/usecase_ru_icx.cfg | 59 + .../cat_b/mu1_100mhz/152/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/153/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/153/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/153/config_file_o_du.dat | 348 + .../cat_b/mu1_100mhz/153/config_file_o_ru.dat | 398 ++ .../usecase/cat_b/mu1_100mhz/153/usecase_du.cfg | 61 + .../usecase/cat_b/mu1_100mhz/153/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/153/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/153/usecase_du_icx2.cfg | 59 + .../usecase/cat_b/mu1_100mhz/153/usecase_ru.cfg | 61 + .../usecase/cat_b/mu1_100mhz/153/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/153/usecase_ru_icx.cfg | 59 + .../cat_b/mu1_100mhz/153/usecase_ru_icx2.cfg | 60 + .../cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/154/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/154/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/154/config_file_o_du.dat | 304 + .../cat_b/mu1_100mhz/154/config_file_o_ru.dat | 344 + .../usecase/cat_b/mu1_100mhz/154/usecase_du.cfg | 61 + .../usecase/cat_b/mu1_100mhz/154/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/154/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/154/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/154/usecase_ru.cfg | 66 + .../usecase/cat_b/mu1_100mhz/154/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/154/usecase_ru_icx.cfg | 59 + .../cat_b/mu1_100mhz/154/usecase_ru_icx2.cfg | 59 + .../cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/1841/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/1841/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/1841/peak_o_du_tst376.dat | 31 +- .../cat_b/mu1_100mhz/1841/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/1841/usecase_du2.cfg | 60 + .../cat_b/mu1_100mhz/1841/usecase_du_icx.cfg | 2 +- .../cat_b/mu1_100mhz/1841/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/1841/usecase_ru2.cfg | 58 + .../cat_b/mu1_100mhz/1841/usecase_ru_icx.cfg | 2 +- .../cat_b/mu1_100mhz/1841/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/2/config_file_o_du.dat | 59 +- .../cat_b/mu1_100mhz/2/config_file_o_ru.dat | 187 +- .../app/usecase/cat_b/mu1_100mhz/2/usecase_du.cfg | 4 +- .../app/usecase/cat_b/mu1_100mhz/2/usecase_du2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/2/usecase_du_icx2.cfg | 71 + .../app/usecase/cat_b/mu1_100mhz/2/usecase_ru.cfg | 5 +- .../app/usecase/cat_b/mu1_100mhz/2/usecase_ru2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/2/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/201/config_file_o_du.dat | 48 +- .../cat_b/mu1_100mhz/201/config_file_o_ru.dat | 110 +- .../usecase/cat_b/mu1_100mhz/201/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/201/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/201/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/201/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/201/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/201/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du.xml | 6 +- .../cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/202/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/202/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/202/usecase_du.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/202/usecase_du2.cfg | 72 + .../cat_b/mu1_100mhz/202/usecase_du_icx.cfg | 68 + .../cat_b/mu1_100mhz/202/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/202/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/202/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/202/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/203/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/203/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/203/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/203/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/203/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/203/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/203/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/203/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/204/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/204/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/204/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/204/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/204/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/204/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/204/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/204/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/205/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/205/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/205/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/205/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/205/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/205/usecase_ru.cfg | 69 + .../usecase/cat_b/mu1_100mhz/205/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/205/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/206/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/206/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/206/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/206/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/206/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/206/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/206/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/206/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/211/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/211/config_file_o_ru.dat | 110 +- .../usecase/cat_b/mu1_100mhz/211/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/211/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/211/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/211/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/211/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/211/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du.xml | 4 +- .../cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/212/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/212/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/212/config_file_o_du.dat | 43 +- .../cat_b/mu1_100mhz/212/config_file_o_ru.dat | 171 +- .../usecase/cat_b/mu1_100mhz/212/usecase_du.cfg | 6 +- .../usecase/cat_b/mu1_100mhz/212/usecase_du2.cfg | 59 + .../cat_b/mu1_100mhz/212/usecase_du_icx2.cfg | 59 + .../usecase/cat_b/mu1_100mhz/212/usecase_ru.cfg | 8 +- .../usecase/cat_b/mu1_100mhz/212/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/212/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/213/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/213/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/213/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/213/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/213/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/213/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/213/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/213/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/214/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/214/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/214/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/214/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/214/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/214/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/214/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/214/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/215/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/215/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/215/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/215/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/215/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/215/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/215/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/215/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/216/config_file_o_du.dat | 47 +- .../cat_b/mu1_100mhz/216/config_file_o_ru.dat | 174 +- .../usecase/cat_b/mu1_100mhz/216/usecase_du.cfg | 7 +- .../usecase/cat_b/mu1_100mhz/216/usecase_du2.cfg | 72 + .../cat_b/mu1_100mhz/216/usecase_du_icx2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/216/usecase_ru.cfg | 5 +- .../usecase/cat_b/mu1_100mhz/216/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/216/usecase_ru_icx2.cfg | 72 + .../cat_b/mu1_100mhz/221/config_file_o_du.dat | 215 + .../cat_b/mu1_100mhz/221/config_file_o_ru.dat | 233 + .../usecase/cat_b/mu1_100mhz/221/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/221/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/221/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/221/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/221/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/221/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/222/config_file_o_du.dat | 240 + .../cat_b/mu1_100mhz/222/config_file_o_ru.dat | 269 + .../usecase/cat_b/mu1_100mhz/222/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/222/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/222/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/222/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/222/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/222/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/223/config_file_o_du.dat | 229 + .../cat_b/mu1_100mhz/223/config_file_o_ru.dat | 264 + .../usecase/cat_b/mu1_100mhz/223/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/223/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/223/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/223/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/223/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/223/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/224/config_file_o_du.dat | 229 + .../cat_b/mu1_100mhz/224/config_file_o_ru.dat | 264 + .../usecase/cat_b/mu1_100mhz/224/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/224/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/224/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/224/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/224/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/224/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/225/config_file_o_du.dat | 231 + .../cat_b/mu1_100mhz/225/config_file_o_ru.dat | 266 + .../usecase/cat_b/mu1_100mhz/225/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/225/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/225/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/225/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/225/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/225/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/226/config_file_o_du.dat | 235 + .../cat_b/mu1_100mhz/226/config_file_o_ru.dat | 268 + .../usecase/cat_b/mu1_100mhz/226/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/226/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/226/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/226/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/226/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/226/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/231/config_file_o_du.dat | 215 + .../cat_b/mu1_100mhz/231/config_file_o_ru.dat | 233 + .../usecase/cat_b/mu1_100mhz/231/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/231/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/231/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/231/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/231/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/231/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/232/config_file_o_du.dat | 240 + .../cat_b/mu1_100mhz/232/config_file_o_ru.dat | 269 + .../usecase/cat_b/mu1_100mhz/232/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/232/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/232/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/232/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/232/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/232/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/233/config_file_o_du.dat | 229 + .../cat_b/mu1_100mhz/233/config_file_o_ru.dat | 264 + .../usecase/cat_b/mu1_100mhz/233/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/233/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/233/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/233/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/233/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/233/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/234/config_file_o_du.dat | 229 + .../cat_b/mu1_100mhz/234/config_file_o_ru.dat | 264 + .../usecase/cat_b/mu1_100mhz/234/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/234/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/234/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/234/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/234/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/234/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/235/config_file_o_du.dat | 231 + .../cat_b/mu1_100mhz/235/config_file_o_ru.dat | 266 + .../usecase/cat_b/mu1_100mhz/235/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/235/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/235/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/235/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/235/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/235/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/236/config_file_o_du.dat | 235 + .../cat_b/mu1_100mhz/236/config_file_o_ru.dat | 268 + .../usecase/cat_b/mu1_100mhz/236/usecase_du.cfg | 68 + .../usecase/cat_b/mu1_100mhz/236/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/236/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/236/usecase_ru.cfg | 68 + .../usecase/cat_b/mu1_100mhz/236/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/236/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/242/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/242/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/242/peak_o_du_tst376.dat | 52 +- .../cat_b/mu1_100mhz/242/peak_o_ru_tst376.dat | 41 +- .../usecase/cat_b/mu1_100mhz/242/usecase_du.cfg | 23 +- .../usecase/cat_b/mu1_100mhz/242/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/242/usecase_du_icx.cfg | 12 +- .../cat_b/mu1_100mhz/242/usecase_du_icx2.cfg | 61 + .../usecase/cat_b/mu1_100mhz/242/usecase_ru.cfg | 22 +- .../usecase/cat_b/mu1_100mhz/242/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/242/usecase_ru_icx.cfg | 15 +- .../cat_b/mu1_100mhz/242/usecase_ru_icx2.cfg | 60 + .../cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/2422/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/2422/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/2422/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/2422/peak_o_du_tst376.dat | 31 +- .../cat_b/mu1_100mhz/2422/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/2422/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/2422/usecase_du_icx.cfg | 6 +- .../cat_b/mu1_100mhz/2422/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/2422/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/2422/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/2422/usecase_ru_icx.cfg | 11 +- .../cat_b/mu1_100mhz/2422/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/252/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/252/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/252/config_file_o_du.dat | 283 + .../cat_b/mu1_100mhz/252/config_file_o_ru.dat | 334 + .../usecase/cat_b/mu1_100mhz/252/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/252/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/252/usecase_du_icx.cfg | 60 + .../cat_b/mu1_100mhz/252/usecase_du_icx2.cfg | 59 + .../usecase/cat_b/mu1_100mhz/252/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/252/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/252/usecase_ru_icx.cfg | 62 + .../cat_b/mu1_100mhz/252/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/2522/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/2522/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/2522/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/2522/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/2522/config_file_o_du_1.dat | 246 + .../cat_b/mu1_100mhz/2522/config_file_o_ru.dat | 293 + .../cat_b/mu1_100mhz/2522/config_file_o_ru_1.dat | 296 + .../usecase/cat_b/mu1_100mhz/2522/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/2522/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/2522/usecase_du_icx.cfg | 60 + .../cat_b/mu1_100mhz/2522/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/2522/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/2522/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/2522/usecase_ru_icx.cfg | 62 + .../cat_b/mu1_100mhz/2522/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/254/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/254/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/254/config_file_o_du.dat | 304 + .../cat_b/mu1_100mhz/254/config_file_o_ru.dat | 344 + .../usecase/cat_b/mu1_100mhz/254/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/254/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/254/usecase_du_icx.cfg | 60 + .../cat_b/mu1_100mhz/254/usecase_du_icx2.cfg | 59 + .../usecase/cat_b/mu1_100mhz/254/usecase_ru.cfg | 61 + .../usecase/cat_b/mu1_100mhz/254/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/254/usecase_ru_icx.cfg | 61 + .../cat_b/mu1_100mhz/254/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/2842/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/2842/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/2842/peak_o_du_tst376.dat | 31 +- .../cat_b/mu1_100mhz/2842/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/2842/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/2842/usecase_du_icx.cfg | 2 +- .../cat_b/mu1_100mhz/2842/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/2842/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/2842/usecase_ru_icx.cfg | 2 +- .../cat_b/mu1_100mhz/2842/usecase_ru_icx2.cfg | 59 + .../cat_b/mu1_100mhz/3/config_file_o_du.dat | 230 + .../cat_b/mu1_100mhz/3/config_file_o_ru.dat | 238 + .../app/usecase/cat_b/mu1_100mhz/3/usecase_du.cfg | 68 + .../app/usecase/cat_b/mu1_100mhz/3/usecase_du2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/3/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_b/mu1_100mhz/3/usecase_ru.cfg | 68 + .../app/usecase/cat_b/mu1_100mhz/3/usecase_ru2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/3/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/301/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/301/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/301/config_file_o_du.dat | 32 +- .../cat_b/mu1_100mhz/301/config_file_o_ru.dat | 33 +- .../usecase/cat_b/mu1_100mhz/301/usecase_du.cfg | 6 +- .../usecase/cat_b/mu1_100mhz/301/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/301/usecase_du_icx.cfg | 60 + .../cat_b/mu1_100mhz/301/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/301/usecase_ru.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/301/usecase_ru2.cfg | 54 + .../cat_b/mu1_100mhz/301/usecase_ru_icx2.cfg | 54 + .../cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/302/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/302/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/302/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/302/config_file_o_ru.dat | 163 +- .../usecase/cat_b/mu1_100mhz/302/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/302/usecase_du2.cfg | 57 + .../cat_b/mu1_100mhz/302/usecase_du_icx.cfg | 57 + .../cat_b/mu1_100mhz/302/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/302/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/302/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/302/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/303/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/303/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/303/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/303/config_file_o_ru.dat | 169 +- .../usecase/cat_b/mu1_100mhz/303/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/303/usecase_du2.cfg | 59 + .../cat_b/mu1_100mhz/303/usecase_du_icx.cfg | 55 + .../cat_b/mu1_100mhz/303/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/303/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/303/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/303/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/304/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/304/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/304/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/304/config_file_o_ru.dat | 170 +- .../usecase/cat_b/mu1_100mhz/304/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/304/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/304/usecase_du_icx.cfg | 57 + .../cat_b/mu1_100mhz/304/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/304/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/304/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/304/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/305/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/305/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/305/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/305/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/305/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/305/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/305/usecase_du_icx.cfg | 57 + .../cat_b/mu1_100mhz/305/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/305/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/305/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/305/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/306/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/306/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/306/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/306/config_file_o_ru.dat | 169 +- .../usecase/cat_b/mu1_100mhz/306/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/306/usecase_du2.cfg | 57 + .../cat_b/mu1_100mhz/306/usecase_du_icx.cfg | 57 + .../cat_b/mu1_100mhz/306/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/306/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/306/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/306/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du.xml | 6 +- .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/311/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx.xml | 65 + .../mu1_100mhz/311/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/311/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/311/config_file_o_ru.dat | 33 +- .../usecase/cat_b/mu1_100mhz/311/usecase_du.cfg | 7 +- .../usecase/cat_b/mu1_100mhz/311/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/311/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/311/usecase_du_icx2.cfg | 59 + .../usecase/cat_b/mu1_100mhz/311/usecase_ru.cfg | 8 +- .../usecase/cat_b/mu1_100mhz/311/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/311/usecase_ru_icx.cfg | 55 + .../cat_b/mu1_100mhz/311/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/312/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/312/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/312/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/312/config_file_o_ru.dat | 163 +- .../usecase/cat_b/mu1_100mhz/312/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/312/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/312/usecase_du_icx.cfg | 56 + .../cat_b/mu1_100mhz/312/usecase_du_icx2.cfg | 56 + .../usecase/cat_b/mu1_100mhz/312/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/312/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/312/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/313/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/313/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/313/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/313/config_file_o_ru.dat | 169 +- .../usecase/cat_b/mu1_100mhz/313/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/313/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/313/usecase_du_icx.cfg | 56 + .../cat_b/mu1_100mhz/313/usecase_du_icx2.cfg | 56 + .../usecase/cat_b/mu1_100mhz/313/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/313/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/313/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/314/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/314/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/314/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/314/config_file_o_ru.dat | 170 +- .../usecase/cat_b/mu1_100mhz/314/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/314/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/314/usecase_du_icx.cfg | 56 + .../cat_b/mu1_100mhz/314/usecase_du_icx2.cfg | 56 + .../usecase/cat_b/mu1_100mhz/314/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/314/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/314/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/315/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/315/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/315/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/315/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/315/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/315/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/315/usecase_du_icx.cfg | 56 + .../cat_b/mu1_100mhz/315/usecase_du_icx2.cfg | 56 + .../usecase/cat_b/mu1_100mhz/315/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/315/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/315/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du.xml | 2 +- .../cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/316/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/316/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/316/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/316/config_file_o_ru.dat | 169 +- .../usecase/cat_b/mu1_100mhz/316/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/316/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/316/usecase_du_icx.cfg | 56 + .../cat_b/mu1_100mhz/316/usecase_du_icx2.cfg | 56 + .../usecase/cat_b/mu1_100mhz/316/usecase_ru.cfg | 1 + .../usecase/cat_b/mu1_100mhz/316/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/316/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/321/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/321/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/321/config_file_o_du.dat | 55 +- .../cat_b/mu1_100mhz/321/config_file_o_ru.dat | 55 +- .../usecase/cat_b/mu1_100mhz/321/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/321/usecase_du2.cfg | 59 + .../cat_b/mu1_100mhz/321/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/321/usecase_du_icx2.cfg | 62 + .../usecase/cat_b/mu1_100mhz/321/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/321/usecase_ru2.cfg | 54 + .../cat_b/mu1_100mhz/321/usecase_ru_icx2.cfg | 54 + .../cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/322/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/322/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/322/config_file_o_du.dat | 39 +- .../cat_b/mu1_100mhz/322/config_file_o_ru.dat | 39 +- .../usecase/cat_b/mu1_100mhz/322/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/322/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/322/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/322/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/322/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/322/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/323/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/323/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/323/config_file_o_du.dat | 39 +- .../cat_b/mu1_100mhz/323/config_file_o_ru.dat | 39 +- .../usecase/cat_b/mu1_100mhz/323/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/323/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/323/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/323/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/323/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/323/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/324/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/324/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/324/config_file_o_du.dat | 41 +- .../cat_b/mu1_100mhz/324/config_file_o_ru.dat | 40 +- .../usecase/cat_b/mu1_100mhz/324/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/324/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/324/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/324/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/324/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/324/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/325/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/325/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/325/config_file_o_du.dat | 39 +- .../cat_b/mu1_100mhz/325/config_file_o_ru.dat | 39 +- .../usecase/cat_b/mu1_100mhz/325/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/325/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/325/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/325/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/325/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/325/usecase_ru_icx2.cfg | 53 + .../app/usecase/cat_b/mu1_100mhz/3301/avg_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3301/avg_o_du_tst377.dat | 31 +- .../app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3301/avg_o_ru_tst377.dat | 31 +- .../mu1_100mhz/3301/avg_o_ru_tst377_dynamic.dat | 291 + .../cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/3301/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru.xml | 4 +- .../cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/3301/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/3301/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/3301/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/3301/peak_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3301/peak_o_du_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3301/peak_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3301/peak_o_ru_tst376.dat | 31 +- .../mu1_100mhz/3301/peak_o_ru_tst376_dynamic.dat | 300 + .../usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg | 3 +- .../usecase/cat_b/mu1_100mhz/3301/usecase_du2.cfg | 64 + .../cat_b/mu1_100mhz/3301/usecase_du_icx2.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg | 3 +- .../usecase/cat_b/mu1_100mhz/3301/usecase_ru2.cfg | 64 + .../cat_b/mu1_100mhz/3301/usecase_ru_dynamic.cfg | 62 + .../cat_b/mu1_100mhz/3301/usecase_ru_icx2.cfg | 64 + .../app/usecase/cat_b/mu1_100mhz/3311/avg_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3311/avg_o_du_tst377.dat | 31 +- .../app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3311/avg_o_ru_tst377.dat | 31 +- .../cat_b/mu1_100mhz/3311/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/3311/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/3311/peak_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3311/peak_o_du_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3311/peak_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3311/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3311/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3311/usecase_du2.cfg | 64 + .../cat_b/mu1_100mhz/3311/usecase_du_icx2.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3311/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3311/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/3311/usecase_ru_icx2.cfg | 63 + .../app/usecase/cat_b/mu1_100mhz/3321/avg_o_du.dat | 235 + .../cat_b/mu1_100mhz/3321/avg_o_du_tst377.dat | 242 + .../app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru.dat | 287 + .../cat_b/mu1_100mhz/3321/avg_o_ru_tst377.dat | 290 + .../cat_b/mu1_100mhz/3321/avg_rxconfig_0.cfg | 31 + .../cat_b/mu1_100mhz/3321/avg_rxconfig_1.cfg | 31 + .../cat_b/mu1_100mhz/3321/avg_rxconfig_2.cfg | 31 + .../cat_b/mu1_100mhz/3321/avg_rxconfig_3.cfg | 31 + .../cat_b/mu1_100mhz/3321/avg_txconfig_0.cfg | 32 + .../cat_b/mu1_100mhz/3321/avg_txconfig_1.cfg | 32 + .../cat_b/mu1_100mhz/3321/avg_txconfig_2.cfg | 32 + .../cat_b/mu1_100mhz/3321/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/3321/config_file_o_ru.dat | 272 + .../usecase/cat_b/mu1_100mhz/3321/peak_o_du.dat | 246 + .../cat_b/mu1_100mhz/3321/peak_o_du_tst376.dat | 249 + .../usecase/cat_b/mu1_100mhz/3321/peak_o_ru.dat | 296 + .../cat_b/mu1_100mhz/3321/peak_o_ru_tst376.dat | 299 + .../cat_b/mu1_100mhz/3321/peak_rxconfig_0.cfg | 34 + .../cat_b/mu1_100mhz/3321/peak_rxconfig_1.cfg | 34 + .../cat_b/mu1_100mhz/3321/peak_rxconfig_2.cfg | 34 + .../cat_b/mu1_100mhz/3321/peak_rxconfig_3.cfg | 34 + .../cat_b/mu1_100mhz/3321/peak_txconfig_0.cfg | 35 + .../cat_b/mu1_100mhz/3321/peak_txconfig_1.cfg | 35 + .../cat_b/mu1_100mhz/3321/peak_txconfig_2.cfg | 36 + .../usecase/cat_b/mu1_100mhz/3321/usecase_du.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3321/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/3321/usecase_du_csx.cfg | 63 + .../cat_b/mu1_100mhz/3321/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/3321/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3321/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/3321/usecase_ru_csx.cfg | 61 + .../cat_b/mu1_100mhz/3321/usecase_ru_icx2.cfg | 62 + .../app/usecase/cat_b/mu1_100mhz/3331/avg_o_du.dat | 235 + .../cat_b/mu1_100mhz/3331/avg_o_du_tst377.dat | 242 + .../app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru.dat | 287 + .../cat_b/mu1_100mhz/3331/avg_o_ru_tst377.dat | 290 + .../cat_b/mu1_100mhz/3331/avg_rxconfig_0.cfg | 31 + .../cat_b/mu1_100mhz/3331/avg_rxconfig_1.cfg | 31 + .../cat_b/mu1_100mhz/3331/avg_rxconfig_2.cfg | 31 + .../cat_b/mu1_100mhz/3331/avg_rxconfig_3.cfg | 31 + .../cat_b/mu1_100mhz/3331/avg_txconfig_0.cfg | 32 + .../cat_b/mu1_100mhz/3331/avg_txconfig_1.cfg | 32 + .../cat_b/mu1_100mhz/3331/avg_txconfig_2.cfg | 32 + .../cat_b/mu1_100mhz/3331/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/3331/config_file_o_ru.dat | 272 + .../usecase/cat_b/mu1_100mhz/3331/peak_o_du.dat | 246 + .../cat_b/mu1_100mhz/3331/peak_o_du_tst376.dat | 249 + .../usecase/cat_b/mu1_100mhz/3331/peak_o_ru.dat | 296 + .../cat_b/mu1_100mhz/3331/peak_o_ru_tst376.dat | 299 + .../cat_b/mu1_100mhz/3331/peak_rxconfig_0.cfg | 34 + .../cat_b/mu1_100mhz/3331/peak_rxconfig_1.cfg | 34 + .../cat_b/mu1_100mhz/3331/peak_rxconfig_2.cfg | 34 + .../cat_b/mu1_100mhz/3331/peak_rxconfig_3.cfg | 34 + .../cat_b/mu1_100mhz/3331/peak_txconfig_0.cfg | 35 + .../cat_b/mu1_100mhz/3331/peak_txconfig_1.cfg | 35 + .../cat_b/mu1_100mhz/3331/peak_txconfig_2.cfg | 36 + .../usecase/cat_b/mu1_100mhz/3331/usecase_du.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3331/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/3331/usecase_du_csx.cfg | 63 + .../cat_b/mu1_100mhz/3331/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/3331/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3331/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/3331/usecase_ru_csx.cfg | 61 + .../cat_b/mu1_100mhz/3331/usecase_ru_icx2.cfg | 63 + .../cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/342/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/342/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/342/peak_o_du_tst376.dat | 52 +- .../cat_b/mu1_100mhz/342/peak_o_ru_tst376.dat | 41 +- .../usecase/cat_b/mu1_100mhz/342/usecase_du.cfg | 17 +- .../usecase/cat_b/mu1_100mhz/342/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/342/usecase_du_icx.cfg | 14 +- .../cat_b/mu1_100mhz/342/usecase_du_icx2.cfg | 62 + .../usecase/cat_b/mu1_100mhz/342/usecase_ru.cfg | 16 +- .../usecase/cat_b/mu1_100mhz/342/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/342/usecase_ru_icx.cfg | 14 +- .../cat_b/mu1_100mhz/342/usecase_ru_icx2.cfg | 61 + .../cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/3423/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/3423/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/3423/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/3423/peak_o_du_tst376.dat | 236 + .../cat_b/mu1_100mhz/3423/peak_o_ru_tst376.dat | 286 + .../usecase/cat_b/mu1_100mhz/3423/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3423/usecase_du2.cfg | 60 + .../cat_b/mu1_100mhz/3423/usecase_du_icx.cfg | 63 + .../cat_b/mu1_100mhz/3423/usecase_du_icx2.cfg | 60 + .../usecase/cat_b/mu1_100mhz/3423/usecase_ru.cfg | 61 + .../usecase/cat_b/mu1_100mhz/3423/usecase_ru2.cfg | 61 + .../cat_b/mu1_100mhz/3423/usecase_ru_icx.cfg | 59 + .../cat_b/mu1_100mhz/3423/usecase_ru_icx2.cfg | 59 + .../app/usecase/cat_b/mu1_100mhz/3501/avg_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3501/avg_o_du_tst377.dat | 31 +- .../app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3501/avg_o_ru_tst377.dat | 31 +- .../cat_b/mu1_100mhz/3501/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/3501/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/3501/peak_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3501/peak_o_du_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3501/peak_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3501/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3501/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3501/usecase_du2.cfg | 65 + .../cat_b/mu1_100mhz/3501/usecase_du_icx2.cfg | 65 + .../usecase/cat_b/mu1_100mhz/3501/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3501/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/3501/usecase_ru_icx2.cfg | 63 + .../app/usecase/cat_b/mu1_100mhz/3511/avg_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3511/avg_o_du_tst377.dat | 31 +- .../app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3511/avg_o_ru_tst377.dat | 31 +- .../cat_b/mu1_100mhz/3511/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/3511/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/3511/peak_o_du.dat | 31 +- .../cat_b/mu1_100mhz/3511/peak_o_du_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3511/peak_o_ru.dat | 31 +- .../cat_b/mu1_100mhz/3511/peak_o_ru_tst376.dat | 31 +- .../usecase/cat_b/mu1_100mhz/3511/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3511/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/3511/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/3511/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/3511/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/3511/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/352/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/352/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/352/config_file_o_du.dat | 283 + .../cat_b/mu1_100mhz/352/config_file_o_ru.dat | 334 + .../usecase/cat_b/mu1_100mhz/352/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/352/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/352/usecase_du_icx.cfg | 61 + .../cat_b/mu1_100mhz/352/usecase_du_icx2.cfg | 61 + .../usecase/cat_b/mu1_100mhz/352/usecase_ru.cfg | 64 + .../usecase/cat_b/mu1_100mhz/352/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/352/usecase_ru_icx.cfg | 61 + .../cat_b/mu1_100mhz/352/usecase_ru_icx2.cfg | 62 + .../app/usecase/cat_b/mu1_100mhz/3521/avg_o_du.dat | 264 + .../cat_b/mu1_100mhz/3521/avg_o_du_tst377.dat | 267 + .../app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru.dat | 314 + .../cat_b/mu1_100mhz/3521/avg_o_ru_tst377.dat | 317 + .../cat_b/mu1_100mhz/3521/avg_rxconfig_0.cfg | 31 + .../cat_b/mu1_100mhz/3521/avg_rxconfig_1.cfg | 31 + .../cat_b/mu1_100mhz/3521/avg_rxconfig_2.cfg | 31 + .../cat_b/mu1_100mhz/3521/avg_rxconfig_3.cfg | 31 + .../cat_b/mu1_100mhz/3521/avg_txconfig_0.cfg | 32 + .../cat_b/mu1_100mhz/3521/avg_txconfig_1.cfg | 32 + .../cat_b/mu1_100mhz/3521/avg_txconfig_2.cfg | 32 + .../cat_b/mu1_100mhz/3521/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/3521/config_file_o_ru.dat | 272 + .../usecase/cat_b/mu1_100mhz/3521/peak_o_du.dat | 304 + .../cat_b/mu1_100mhz/3521/peak_o_du_tst376.dat | 307 + .../usecase/cat_b/mu1_100mhz/3521/peak_o_ru.dat | 352 + .../cat_b/mu1_100mhz/3521/peak_o_ru_tst376.dat | 355 ++ .../cat_b/mu1_100mhz/3521/peak_rxconfig_0.cfg | 34 + .../cat_b/mu1_100mhz/3521/peak_rxconfig_1.cfg | 34 + .../cat_b/mu1_100mhz/3521/peak_rxconfig_2.cfg | 34 + .../cat_b/mu1_100mhz/3521/peak_rxconfig_3.cfg | 34 + .../cat_b/mu1_100mhz/3521/peak_txconfig_0.cfg | 35 + .../cat_b/mu1_100mhz/3521/peak_txconfig_1.cfg | 35 + .../cat_b/mu1_100mhz/3521/peak_txconfig_2.cfg | 36 + .../usecase/cat_b/mu1_100mhz/3521/usecase_du.cfg | 65 + .../usecase/cat_b/mu1_100mhz/3521/usecase_du2.cfg | 65 + .../cat_b/mu1_100mhz/3521/usecase_du_csx.cfg | 63 + .../cat_b/mu1_100mhz/3521/usecase_du_icx2.cfg | 65 + .../usecase/cat_b/mu1_100mhz/3521/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3521/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/3521/usecase_ru_csx.cfg | 61 + .../cat_b/mu1_100mhz/3521/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/3523/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/3523/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/3523/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/3523/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/3523/config_file_o_du_1.dat | 246 + .../cat_b/mu1_100mhz/3523/config_file_o_ru.dat | 293 + .../cat_b/mu1_100mhz/3523/config_file_o_ru_1.dat | 296 + .../usecase/cat_b/mu1_100mhz/3523/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3523/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/3523/usecase_du_icx.cfg | 61 + .../cat_b/mu1_100mhz/3523/usecase_du_icx2.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3523/usecase_ru.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3523/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/3523/usecase_ru_icx.cfg | 62 + .../cat_b/mu1_100mhz/3523/usecase_ru_icx2.cfg | 62 + .../app/usecase/cat_b/mu1_100mhz/3531/avg_o_du.dat | 264 + .../cat_b/mu1_100mhz/3531/avg_o_du_tst377.dat | 267 + .../app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru.dat | 314 + .../cat_b/mu1_100mhz/3531/avg_o_ru_tst377.dat | 313 + .../cat_b/mu1_100mhz/3531/avg_rxconfig_0.cfg | 31 + .../cat_b/mu1_100mhz/3531/avg_rxconfig_1.cfg | 31 + .../cat_b/mu1_100mhz/3531/avg_rxconfig_2.cfg | 31 + .../cat_b/mu1_100mhz/3531/avg_rxconfig_3.cfg | 31 + .../cat_b/mu1_100mhz/3531/avg_txconfig_0.cfg | 32 + .../cat_b/mu1_100mhz/3531/avg_txconfig_1.cfg | 32 + .../cat_b/mu1_100mhz/3531/avg_txconfig_2.cfg | 32 + .../cat_b/mu1_100mhz/3531/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/3531/config_file_o_ru.dat | 272 + .../usecase/cat_b/mu1_100mhz/3531/peak_o_du.dat | 304 + .../cat_b/mu1_100mhz/3531/peak_o_du_tst376.dat | 307 + .../usecase/cat_b/mu1_100mhz/3531/peak_o_ru.dat | 352 + .../cat_b/mu1_100mhz/3531/peak_o_ru_tst376.dat | 355 ++ .../cat_b/mu1_100mhz/3531/peak_rxconfig_0.cfg | 34 + .../cat_b/mu1_100mhz/3531/peak_rxconfig_1.cfg | 34 + .../cat_b/mu1_100mhz/3531/peak_rxconfig_2.cfg | 34 + .../cat_b/mu1_100mhz/3531/peak_rxconfig_3.cfg | 34 + .../cat_b/mu1_100mhz/3531/peak_txconfig_0.cfg | 35 + .../cat_b/mu1_100mhz/3531/peak_txconfig_1.cfg | 35 + .../cat_b/mu1_100mhz/3531/peak_txconfig_2.cfg | 36 + .../usecase/cat_b/mu1_100mhz/3531/usecase_du.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3531/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/3531/usecase_du_csx.cfg | 63 + .../cat_b/mu1_100mhz/3531/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/3531/usecase_ru.cfg | 62 + .../usecase/cat_b/mu1_100mhz/3531/usecase_ru2.cfg | 62 + .../cat_b/mu1_100mhz/3531/usecase_ru_csx.cfg | 61 + .../cat_b/mu1_100mhz/3531/usecase_ru_icx2.cfg | 62 + .../cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/354/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/354/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/354/config_file_o_du.dat | 304 + .../cat_b/mu1_100mhz/354/config_file_o_ru.dat | 345 + .../usecase/cat_b/mu1_100mhz/354/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/354/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/354/usecase_du_icx.cfg | 61 + .../cat_b/mu1_100mhz/354/usecase_du_icx2.cfg | 61 + .../usecase/cat_b/mu1_100mhz/354/usecase_ru.cfg | 64 + .../usecase/cat_b/mu1_100mhz/354/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/354/usecase_ru_icx.cfg | 59 + .../cat_b/mu1_100mhz/354/usecase_ru_icx2.cfg | 59 + .../cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/384/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/384/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/384/peak_o_du_tst376.dat | 261 + .../cat_b/mu1_100mhz/384/peak_o_ru_tst376.dat | 302 + .../usecase/cat_b/mu1_100mhz/384/usecase_du.cfg | 26 +- .../usecase/cat_b/mu1_100mhz/384/usecase_du2.cfg | 63 + .../cat_b/mu1_100mhz/384/usecase_du_icx.cfg | 17 +- .../cat_b/mu1_100mhz/384/usecase_du_icx2.cfg | 62 + .../usecase/cat_b/mu1_100mhz/384/usecase_ru.cfg | 17 +- .../usecase/cat_b/mu1_100mhz/384/usecase_ru2.cfg | 66 + .../cat_b/mu1_100mhz/384/usecase_ru_icx.cfg | 20 +- .../cat_b/mu1_100mhz/384/usecase_ru_icx2.cfg | 60 + .../cat_b/mu1_100mhz/3843/peak_o_du_tst376.dat | 250 + .../cat_b/mu1_100mhz/3843/peak_o_ru_tst376.dat | 300 + .../usecase/cat_b/mu1_100mhz/3843/usecase_du.cfg | 64 + .../usecase/cat_b/mu1_100mhz/3843/usecase_du2.cfg | 61 + .../cat_b/mu1_100mhz/3843/usecase_du_icx.cfg | 62 + .../cat_b/mu1_100mhz/3843/usecase_du_icx2.cfg | 61 + .../usecase/cat_b/mu1_100mhz/3843/usecase_ru.cfg | 63 + .../usecase/cat_b/mu1_100mhz/3843/usecase_ru2.cfg | 60 + .../cat_b/mu1_100mhz/3843/usecase_ru_icx.cfg | 61 + .../cat_b/mu1_100mhz/3843/usecase_ru_icx2.cfg | 60 + .../cat_b/mu1_100mhz/4/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/4/config_file_o_ru.dat | 257 + .../app/usecase/cat_b/mu1_100mhz/4/usecase_du.cfg | 68 + .../app/usecase/cat_b/mu1_100mhz/4/usecase_du2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/4/usecase_du_icx2.cfg | 70 + .../app/usecase/cat_b/mu1_100mhz/4/usecase_ru.cfg | 68 + .../app/usecase/cat_b/mu1_100mhz/4/usecase_ru2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/4/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/401/config_file_o_du.dat | 33 +- .../cat_b/mu1_100mhz/401/config_file_o_ru.dat | 32 +- .../usecase/cat_b/mu1_100mhz/401/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/401/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/401/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/401/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/401/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/411/config_file_o_du.dat | 235 + .../cat_b/mu1_100mhz/411/config_file_o_ru.dat | 272 + .../usecase/cat_b/mu1_100mhz/411/usecase_du.cfg | 69 + .../usecase/cat_b/mu1_100mhz/411/usecase_du2.cfg | 71 + .../cat_b/mu1_100mhz/411/usecase_du_icx2.cfg | 71 + .../usecase/cat_b/mu1_100mhz/411/usecase_ru.cfg | 55 + .../usecase/cat_b/mu1_100mhz/411/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/411/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/421/peak_o_du_tst376.dat | 236 + .../cat_b/mu1_100mhz/421/peak_o_ru_tst376.dat | 286 + .../usecase/cat_b/mu1_100mhz/421/usecase_du.cfg | 62 + .../usecase/cat_b/mu1_100mhz/421/usecase_du2.cfg | 62 + .../cat_b/mu1_100mhz/421/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/421/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/421/usecase_ru.cfg | 63 + .../usecase/cat_b/mu1_100mhz/421/usecase_ru2.cfg | 63 + .../cat_b/mu1_100mhz/421/usecase_ru_icx.cfg | 58 + .../cat_b/mu1_100mhz/421/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/4424/bbu_pool_cfg_o_du_icx.xml | 65 + .../mu1_100mhz/4424/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/4424/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/4424/peak_o_du_tst376.dat | 236 + .../cat_b/mu1_100mhz/4424/peak_o_ru_tst376.dat | 286 + .../usecase/cat_b/mu1_100mhz/4424/usecase_du.cfg | 75 + .../usecase/cat_b/mu1_100mhz/4424/usecase_du2.cfg | 73 + .../cat_b/mu1_100mhz/4424/usecase_du_icx.cfg | 72 + .../cat_b/mu1_100mhz/4424/usecase_du_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/4424/usecase_ru.cfg | 73 + .../usecase/cat_b/mu1_100mhz/4424/usecase_ru2.cfg | 72 + .../cat_b/mu1_100mhz/4424/usecase_ru_icx.cfg | 69 + .../cat_b/mu1_100mhz/4424/usecase_ru_icx2.cfg | 69 + .../cat_b/mu1_100mhz/4844/peak_o_du_tst376.dat | 250 + .../cat_b/mu1_100mhz/4844/peak_o_ru_tst376.dat | 300 + .../usecase/cat_b/mu1_100mhz/4844/usecase_du.cfg | 73 + .../usecase/cat_b/mu1_100mhz/4844/usecase_du2.cfg | 70 + .../cat_b/mu1_100mhz/4844/usecase_du_icx.cfg | 70 + .../cat_b/mu1_100mhz/4844/usecase_du_icx2.cfg | 69 + .../usecase/cat_b/mu1_100mhz/4844/usecase_ru.cfg | 72 + .../usecase/cat_b/mu1_100mhz/4844/usecase_ru2.cfg | 69 + .../cat_b/mu1_100mhz/4844/usecase_ru_icx.cfg | 68 + .../cat_b/mu1_100mhz/4844/usecase_ru_icx2.cfg | 68 + .../cat_b/mu1_100mhz/501/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/501/config_file_o_ru.dat | 33 +- .../usecase/cat_b/mu1_100mhz/501/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/501/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/501/usecase_du_icx.cfg | 59 + .../cat_b/mu1_100mhz/501/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/501/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/501/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/501/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/502/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/502/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/502/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/502/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/502/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/502/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/502/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/502/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/502/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/503/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/503/config_file_o_ru.dat | 39 +- .../usecase/cat_b/mu1_100mhz/503/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/503/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/503/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/503/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/503/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/503/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/503/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/504/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/504/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/504/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/504/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/504/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/504/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/504/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/504/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/504/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/505/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/505/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/505/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/505/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/505/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/505/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/505/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/505/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/505/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/506/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/506/config_file_o_ru.dat | 35 +- .../usecase/cat_b/mu1_100mhz/506/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/506/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/506/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/506/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/506/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/506/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/506/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/511/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/511/config_file_o_ru.dat | 33 +- .../usecase/cat_b/mu1_100mhz/511/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/511/usecase_du2.cfg | 60 + .../cat_b/mu1_100mhz/511/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/511/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/511/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/511/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/511/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/512/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/512/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/512/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/512/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/512/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/512/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/512/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/512/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/512/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/513/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/513/config_file_o_ru.dat | 39 +- .../usecase/cat_b/mu1_100mhz/513/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/513/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/513/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/513/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/513/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/513/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/513/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/514/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/514/config_file_o_ru.dat | 37 +- .../usecase/cat_b/mu1_100mhz/514/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/514/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/514/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/514/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/514/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/514/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/514/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/515/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/515/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/515/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/515/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/515/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/515/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/515/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/515/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/515/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/516/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/516/config_file_o_ru.dat | 37 +- .../usecase/cat_b/mu1_100mhz/516/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/516/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/516/usecase_du_icx.cfg | 58 + .../cat_b/mu1_100mhz/516/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/516/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/516/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/516/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/601/config_file_o_du.dat | 225 + .../cat_b/mu1_100mhz/601/config_file_o_ru.dat | 274 + .../usecase/cat_b/mu1_100mhz/601/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/601/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/601/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/601/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/601/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/601/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx.xml | 6 +- .../mu1_100mhz/602/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru.xml | 2 +- .../cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/602/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/602/config_file_o_du.dat | 208 + .../cat_b/mu1_100mhz/602/config_file_o_ru.dat | 252 + .../usecase/cat_b/mu1_100mhz/602/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/602/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/602/usecase_du_icx.cfg | 4 +- .../cat_b/mu1_100mhz/602/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/602/usecase_ru.cfg | 52 + .../usecase/cat_b/mu1_100mhz/602/usecase_ru2.cfg | 55 + .../cat_b/mu1_100mhz/602/usecase_ru_icx2.cfg | 55 + .../cat_b/mu1_100mhz/603/config_file_o_du.dat | 209 + .../cat_b/mu1_100mhz/603/config_file_o_ru.dat | 252 + .../usecase/cat_b/mu1_100mhz/603/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/603/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/603/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/603/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/603/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/603/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/604/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/604/config_file_o_ru.dat | 268 + .../usecase/cat_b/mu1_100mhz/604/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/604/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/604/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/604/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/604/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/604/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/605/config_file_o_du.dat | 209 + .../cat_b/mu1_100mhz/605/config_file_o_ru.dat | 253 + .../usecase/cat_b/mu1_100mhz/605/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/605/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/605/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/605/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/605/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/605/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/606/config_file_o_du.dat | 210 + .../cat_b/mu1_100mhz/606/config_file_o_ru.dat | 252 + .../usecase/cat_b/mu1_100mhz/606/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/606/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/606/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/606/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/606/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/606/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/611/config_file_o_du.dat | 225 + .../cat_b/mu1_100mhz/611/config_file_o_ru.dat | 274 + .../usecase/cat_b/mu1_100mhz/611/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/611/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/611/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/611/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/611/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/611/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du.xml | 6 +- .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx.xml | 2 +- .../mu1_100mhz/612/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx.xml | 65 + .../mu1_100mhz/612/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/612/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/612/config_file_o_ru.dat | 163 +- .../usecase/cat_b/mu1_100mhz/612/usecase_du.cfg | 4 +- .../usecase/cat_b/mu1_100mhz/612/usecase_du2.cfg | 56 + .../cat_b/mu1_100mhz/612/usecase_du_icx.cfg | 6 +- .../cat_b/mu1_100mhz/612/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/612/usecase_ru.cfg | 8 +- .../usecase/cat_b/mu1_100mhz/612/usecase_ru2.cfg | 56 + .../cat_b/mu1_100mhz/612/usecase_ru_icx.cfg | 55 + .../cat_b/mu1_100mhz/612/usecase_ru_icx2.cfg | 56 + .../cat_b/mu1_100mhz/613/config_file_o_du.dat | 209 + .../cat_b/mu1_100mhz/613/config_file_o_ru.dat | 252 + .../usecase/cat_b/mu1_100mhz/613/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/613/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/613/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/613/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/613/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/613/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/614/config_file_o_du.dat | 220 + .../cat_b/mu1_100mhz/614/config_file_o_ru.dat | 268 + .../usecase/cat_b/mu1_100mhz/614/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/614/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/614/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/614/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/614/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/614/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/615/config_file_o_du.dat | 209 + .../cat_b/mu1_100mhz/615/config_file_o_ru.dat | 253 + .../usecase/cat_b/mu1_100mhz/615/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/615/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/615/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/615/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/615/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/615/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/616/config_file_o_du.dat | 210 + .../cat_b/mu1_100mhz/616/config_file_o_ru.dat | 252 + .../usecase/cat_b/mu1_100mhz/616/usecase_du.cfg | 55 + .../usecase/cat_b/mu1_100mhz/616/usecase_du2.cfg | 55 + .../cat_b/mu1_100mhz/616/usecase_du_icx2.cfg | 55 + .../usecase/cat_b/mu1_100mhz/616/usecase_ru.cfg | 51 + .../usecase/cat_b/mu1_100mhz/616/usecase_ru2.cfg | 53 + .../cat_b/mu1_100mhz/616/usecase_ru_icx2.cfg | 53 + .../cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/6451/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/6451/conf_o_du_tst451.dat | 420 ++ .../cat_b/mu1_100mhz/6451/conf_o_ru_tst451.dat | 384 ++ .../usecase/cat_b/mu1_100mhz/6451/slot_rx_0.cfg | 21 + .../usecase/cat_b/mu1_100mhz/6451/slot_rx_1.cfg | 42 + .../usecase/cat_b/mu1_100mhz/6451/slot_rx_2.cfg | 23 + .../usecase/cat_b/mu1_100mhz/6451/slot_rx_3.cfg | 29 + .../usecase/cat_b/mu1_100mhz/6451/slot_tx_0.cfg | 19 + .../usecase/cat_b/mu1_100mhz/6451/slot_tx_1.cfg | 103 + .../usecase/cat_b/mu1_100mhz/6451/slot_tx_2.cfg | 103 + .../usecase/cat_b/mu1_100mhz/6451/usecase_du.cfg | 73 + .../usecase/cat_b/mu1_100mhz/6451/usecase_du2.cfg | 69 + .../cat_b/mu1_100mhz/6451/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/6451/usecase_ru.cfg | 74 + .../usecase/cat_b/mu1_100mhz/6451/usecase_ru2.cfg | 71 + .../cat_b/mu1_100mhz/6451/usecase_ru_icx2.cfg | 68 + .../cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/6911/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/6911/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/6911/conf_o_du_tst389.dat | 285 + .../cat_b/mu1_100mhz/6911/conf_o_ru_tst389.dat | 378 ++ .../usecase/cat_b/mu1_100mhz/6911/slot_rx_0.cfg | 21 + .../usecase/cat_b/mu1_100mhz/6911/slot_rx_1.cfg | 83 + .../usecase/cat_b/mu1_100mhz/6911/slot_rx_2.cfg | 23 + .../usecase/cat_b/mu1_100mhz/6911/slot_rx_3.cfg | 30 + .../usecase/cat_b/mu1_100mhz/6911/slot_tx_0.cfg | 19 + .../usecase/cat_b/mu1_100mhz/6911/slot_tx_1.cfg | 103 + .../usecase/cat_b/mu1_100mhz/6911/slot_tx_2.cfg | 103 + .../usecase/cat_b/mu1_100mhz/6911/usecase_du.cfg | 73 + .../usecase/cat_b/mu1_100mhz/6911/usecase_du2.cfg | 69 + .../cat_b/mu1_100mhz/6911/usecase_du_csx.cfg | 64 + .../cat_b/mu1_100mhz/6911/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/6911/usecase_ru.cfg | 72 + .../usecase/cat_b/mu1_100mhz/6911/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/6911/usecase_ru_icx2.cfg | 70 + .../cat_b/mu1_100mhz/801/config_file_o_du.dat | 283 + .../cat_b/mu1_100mhz/801/config_file_o_ru.dat | 330 + .../usecase/cat_b/mu1_100mhz/801/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/801/usecase_du2.cfg | 57 + .../cat_b/mu1_100mhz/801/usecase_du_icx2.cfg | 57 + .../usecase/cat_b/mu1_100mhz/801/usecase_ru.cfg | 57 + .../usecase/cat_b/mu1_100mhz/801/usecase_ru2.cfg | 58 + .../cat_b/mu1_100mhz/801/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_100mhz/802/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/802/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/802/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/802/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/802/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/802/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/802/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/802/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/803/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/803/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/803/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/803/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/803/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/803/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/803/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/803/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/804/config_file_o_du.dat | 242 + .../cat_b/mu1_100mhz/804/config_file_o_ru.dat | 292 + .../usecase/cat_b/mu1_100mhz/804/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/804/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/804/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/804/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/804/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/804/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/805/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/805/config_file_o_ru.dat | 287 + .../usecase/cat_b/mu1_100mhz/805/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/805/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/805/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/805/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/805/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/805/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/806/config_file_o_du.dat | 244 + .../cat_b/mu1_100mhz/806/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/806/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/806/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/806/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/806/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/806/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/806/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/811/config_file_o_du.dat | 283 + .../cat_b/mu1_100mhz/811/config_file_o_ru.dat | 330 + .../usecase/cat_b/mu1_100mhz/811/usecase_du.cfg | 59 + .../usecase/cat_b/mu1_100mhz/811/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/811/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/811/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/811/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/811/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/812/config_file_o_du.dat | 31 +- .../cat_b/mu1_100mhz/812/config_file_o_ru.dat | 31 +- .../usecase/cat_b/mu1_100mhz/812/usecase_du.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/812/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/812/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/812/usecase_ru.cfg | 2 +- .../usecase/cat_b/mu1_100mhz/812/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/812/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/813/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/813/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/813/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/813/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/813/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/813/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/813/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/813/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/814/config_file_o_du.dat | 242 + .../cat_b/mu1_100mhz/814/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/814/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/814/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/814/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/814/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/814/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/814/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/815/config_file_o_du.dat | 243 + .../cat_b/mu1_100mhz/815/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/815/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/815/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/815/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/815/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/815/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/815/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/816/config_file_o_du.dat | 244 + .../cat_b/mu1_100mhz/816/config_file_o_ru.dat | 286 + .../usecase/cat_b/mu1_100mhz/816/usecase_du.cfg | 58 + .../usecase/cat_b/mu1_100mhz/816/usecase_du2.cfg | 58 + .../cat_b/mu1_100mhz/816/usecase_du_icx2.cfg | 58 + .../usecase/cat_b/mu1_100mhz/816/usecase_ru.cfg | 56 + .../usecase/cat_b/mu1_100mhz/816/usecase_ru2.cfg | 57 + .../cat_b/mu1_100mhz/816/usecase_ru_icx2.cfg | 57 + .../cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du2.xml | 65 + .../mu1_100mhz/911/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru2.xml | 65 + .../mu1_100mhz/911/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../cat_b/mu1_100mhz/911/conf_o_du_tst389.dat | 285 + .../cat_b/mu1_100mhz/911/conf_o_ru_tst389.dat | 383 ++ .../app/usecase/cat_b/mu1_100mhz/911/slot_rx_0.cfg | 21 + .../app/usecase/cat_b/mu1_100mhz/911/slot_rx_1.cfg | 83 + .../app/usecase/cat_b/mu1_100mhz/911/slot_rx_2.cfg | 23 + .../app/usecase/cat_b/mu1_100mhz/911/slot_rx_3.cfg | 30 + .../app/usecase/cat_b/mu1_100mhz/911/slot_tx_0.cfg | 19 + .../app/usecase/cat_b/mu1_100mhz/911/slot_tx_1.cfg | 103 + .../app/usecase/cat_b/mu1_100mhz/911/slot_tx_2.cfg | 103 + .../usecase/cat_b/mu1_100mhz/911/usecase_du.cfg | 71 + .../usecase/cat_b/mu1_100mhz/911/usecase_du2.cfg | 68 + .../cat_b/mu1_100mhz/911/usecase_du_csx.cfg | 64 + .../cat_b/mu1_100mhz/911/usecase_du_icx2.cfg | 63 + .../usecase/cat_b/mu1_100mhz/911/usecase_ru.cfg | 71 + .../usecase/cat_b/mu1_100mhz/911/usecase_ru2.cfg | 70 + .../cat_b/mu1_100mhz/911/usecase_ru_icx2.cfg | 70 + .../usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du.xml | 6 +- .../cat_b/mu1_100mhz/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../cat_b/mu1_100mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_b/mu1_100mhz/config_file_o_du.dat | 46 +- .../usecase/cat_b/mu1_100mhz/config_file_o_ru.dat | 110 +- .../app/usecase/cat_b/mu1_100mhz/usecase_du.cfg | 22 +- .../app/usecase/cat_b/mu1_100mhz/usecase_du2.cfg | 72 + .../usecase/cat_b/mu1_100mhz/usecase_du_icx2.cfg | 72 + .../app/usecase/cat_b/mu1_100mhz/usecase_ru.cfg | 23 +- .../app/usecase/cat_b/mu1_100mhz/usecase_ru2.cfg | 73 + .../usecase/cat_b/mu1_100mhz/usecase_ru_icx2.cfg | 73 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_b/mu1_10mhz/1/peak_o_du_tst376.dat | 160 + .../usecase/cat_b/mu1_10mhz/1/peak_o_ru_tst376.dat | 152 + .../app/usecase/cat_b/mu1_10mhz/1/usecase_du.cfg | 65 + .../app/usecase/cat_b/mu1_10mhz/1/usecase_du2.cfg | 63 + .../usecase/cat_b/mu1_10mhz/1/usecase_du_icx.cfg | 60 + .../usecase/cat_b/mu1_10mhz/1/usecase_du_icx2.cfg | 60 + .../app/usecase/cat_b/mu1_10mhz/1/usecase_ru.cfg | 62 + .../app/usecase/cat_b/mu1_10mhz/1/usecase_ru2.cfg | 60 + .../usecase/cat_b/mu1_10mhz/1/usecase_ru_icx.cfg | 57 + .../usecase/cat_b/mu1_10mhz/1/usecase_ru_icx2.cfg | 58 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml | 65 + .../cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/cat_b/mu1_60mhz/1/peak_o_du_tst376.dat | 160 + .../usecase/cat_b/mu1_60mhz/1/peak_o_ru_tst376.dat | 152 + .../app/usecase/cat_b/mu1_60mhz/1/usecase_du.cfg | 65 + .../app/usecase/cat_b/mu1_60mhz/1/usecase_du2.cfg | 63 + .../usecase/cat_b/mu1_60mhz/1/usecase_du_icx.cfg | 60 + .../usecase/cat_b/mu1_60mhz/1/usecase_du_icx2.cfg | 60 + .../app/usecase/cat_b/mu1_60mhz/1/usecase_ru.cfg | 62 + .../app/usecase/cat_b/mu1_60mhz/1/usecase_ru2.cfg | 60 + .../usecase/cat_b/mu1_60mhz/1/usecase_ru_icx.cfg | 57 + .../usecase/cat_b/mu1_60mhz/1/usecase_ru_icx2.cfg | 58 + .../usecase/dss/mu0_10mhz/10/config_file_o_du.dat | 2 - .../usecase/dss/mu0_10mhz/10/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_10mhz/10/usecase_du2.cfg | 76 + .../usecase/dss/mu0_10mhz/10/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_10mhz/10/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_10mhz/10/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_10mhz/10/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_10mhz/11/config_file_o_du.dat | 2 - .../usecase/dss/mu0_10mhz/11/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_10mhz/11/usecase_du2.cfg | 76 + .../usecase/dss/mu0_10mhz/11/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_10mhz/11/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_10mhz/11/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_10mhz/11/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du.xml | 2 +- .../dss/mu0_10mhz/60/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_10mhz/60/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru.xml | 12 +- .../dss/mu0_10mhz/60/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_10mhz/60/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_10mhz/60/config_file_o_du.dat | 2 - .../usecase/dss/mu0_10mhz/60/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_10mhz/60/usecase_du2.cfg | 76 + .../usecase/dss/mu0_10mhz/60/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_10mhz/60/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_10mhz/60/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_10mhz/60/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du.xml | 2 +- .../dss/mu0_10mhz/61/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_10mhz/61/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru.xml | 12 +- .../dss/mu0_10mhz/61/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_10mhz/61/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_10mhz/61/config_file_o_du.dat | 2 - .../usecase/dss/mu0_10mhz/61/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_10mhz/61/usecase_du2.cfg | 76 + .../usecase/dss/mu0_10mhz/61/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_10mhz/61/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_10mhz/61/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_10mhz/61/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/10/config_file_o_du.dat | 2 - .../usecase/dss/mu0_20mhz/10/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_20mhz/10/usecase_du2.cfg | 76 + .../usecase/dss/mu0_20mhz/10/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_20mhz/10/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_20mhz/10/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_20mhz/10/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_20mhz/11/config_file_o_du.dat | 2 - .../usecase/dss/mu0_20mhz/11/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_20mhz/11/usecase_du2.cfg | 76 + .../usecase/dss/mu0_20mhz/11/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_20mhz/11/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_20mhz/11/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_20mhz/11/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du.xml | 6 +- .../dss/mu0_20mhz/60/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_20mhz/60/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru.xml | 14 +- .../dss/mu0_20mhz/60/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_20mhz/60/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/60/config_file_o_du.dat | 2 - .../usecase/dss/mu0_20mhz/60/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_20mhz/60/usecase_du2.cfg | 76 + .../usecase/dss/mu0_20mhz/60/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_20mhz/60/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_20mhz/60/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_20mhz/60/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du.xml | 6 +- .../dss/mu0_20mhz/61/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_20mhz/61/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru.xml | 12 +- .../dss/mu0_20mhz/61/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_20mhz/61/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/61/config_file_o_du.dat | 2 - .../usecase/dss/mu0_20mhz/61/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_20mhz/61/usecase_du2.cfg | 76 + .../usecase/dss/mu0_20mhz/61/usecase_du_icx2.cfg | 76 + .../app/usecase/dss/mu0_20mhz/61/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_20mhz/61/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_20mhz/61/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_5mhz/10/config_file_o_du.dat | 2 - .../usecase/dss/mu0_5mhz/10/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_5mhz/10/usecase_du2.cfg | 76 + .../usecase/dss/mu0_5mhz/10/usecase_du_icx2.cfg | 76 + fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_5mhz/10/usecase_ru2.cfg | 73 + .../usecase/dss/mu0_5mhz/10/usecase_ru_icx2.cfg | 73 + .../usecase/dss/mu0_5mhz/11/config_file_o_du.dat | 2 - .../usecase/dss/mu0_5mhz/11/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_5mhz/11/usecase_du2.cfg | 76 + .../usecase/dss/mu0_5mhz/11/usecase_du_icx2.cfg | 76 + fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_5mhz/11/usecase_ru2.cfg | 72 + .../usecase/dss/mu0_5mhz/11/usecase_ru_icx2.cfg | 72 + .../usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_5mhz/60/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru.xml | 12 +- .../usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_5mhz/60/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_5mhz/60/config_file_o_du.dat | 2 - .../usecase/dss/mu0_5mhz/60/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_5mhz/60/usecase_du2.cfg | 77 + .../usecase/dss/mu0_5mhz/60/usecase_du_icx2.cfg | 77 + fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_5mhz/60/usecase_ru2.cfg | 71 + .../usecase/dss/mu0_5mhz/60/usecase_ru_icx2.cfg | 71 + .../usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_5mhz/61/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru.xml | 12 +- .../usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_5mhz/61/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/dss/mu0_5mhz/61/config_file_o_du.dat | 2 - .../usecase/dss/mu0_5mhz/61/config_file_o_ru.dat | 4 - .../app/usecase/dss/mu0_5mhz/61/usecase_du2.cfg | 76 + .../usecase/dss/mu0_5mhz/61/usecase_du_icx2.cfg | 76 + fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru.cfg | 1 + .../app/usecase/dss/mu0_5mhz/61/usecase_ru2.cfg | 73 + .../usecase/dss/mu0_5mhz/61/usecase_ru_icx2.cfg | 73 + .../app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du2.xml | 65 + .../dss/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../dss/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_a/mu0_10mhz/8/config_file_o_du.dat | 135 + .../usecase/lte_a/mu0_10mhz/8/config_file_o_ru.dat | 140 + .../app/usecase/lte_a/mu0_10mhz/8/usecase_du.cfg | 55 + .../app/usecase/lte_a/mu0_10mhz/8/usecase_du2.cfg | 54 + .../usecase/lte_a/mu0_10mhz/8/usecase_du_icx2.cfg | 54 + .../app/usecase/lte_a/mu0_10mhz/8/usecase_ru.cfg | 56 + .../app/usecase/lte_a/mu0_10mhz/8/usecase_ru2.cfg | 55 + .../usecase/lte_a/mu0_10mhz/8/usecase_ru_icx2.cfg | 55 + .../usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_a/mu0_10mhz/config_file_o_du.dat | 4 - .../usecase/lte_a/mu0_10mhz/config_file_o_ru.dat | 4 +- .../app/usecase/lte_a/mu0_10mhz/usecase_du2.cfg | 72 + .../usecase/lte_a/mu0_10mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru.cfg | 1 + .../app/usecase/lte_a/mu0_10mhz/usecase_ru2.cfg | 72 + .../usecase/lte_a/mu0_10mhz/usecase_ru_icx2.cfg | 72 + .../lte_a/mu0_20mhz/20/config_file_o_du.dat | 160 + .../lte_a/mu0_20mhz/20/config_file_o_du_nb.dat | 167 + .../lte_a/mu0_20mhz/20/config_file_o_ru.dat | 166 + .../lte_a/mu0_20mhz/20/config_file_o_ru_nb.dat | 172 + .../app/usecase/lte_a/mu0_20mhz/20/usecase_du.cfg | 73 + .../app/usecase/lte_a/mu0_20mhz/20/usecase_du2.cfg | 76 + .../usecase/lte_a/mu0_20mhz/20/usecase_du_icx2.cfg | 76 + .../app/usecase/lte_a/mu0_20mhz/20/usecase_ru.cfg | 72 + .../app/usecase/lte_a/mu0_20mhz/20/usecase_ru2.cfg | 74 + .../usecase/lte_a/mu0_20mhz/20/usecase_ru_icx2.cfg | 74 + .../lte_a/mu0_20mhz/21/config_file_o_du.dat | 160 + .../lte_a/mu0_20mhz/21/config_file_o_du_nb.dat | 169 + .../lte_a/mu0_20mhz/21/config_file_o_ru.dat | 166 + .../lte_a/mu0_20mhz/21/config_file_o_ru_nb.dat | 174 + .../app/usecase/lte_a/mu0_20mhz/21/usecase_du.cfg | 73 + .../app/usecase/lte_a/mu0_20mhz/21/usecase_du2.cfg | 76 + .../usecase/lte_a/mu0_20mhz/21/usecase_du_icx2.cfg | 76 + .../app/usecase/lte_a/mu0_20mhz/21/usecase_ru.cfg | 75 + .../app/usecase/lte_a/mu0_20mhz/21/usecase_ru2.cfg | 77 + .../usecase/lte_a/mu0_20mhz/21/usecase_ru_icx2.cfg | 77 + .../usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du.xml | 65 + .../usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml | 65 + .../usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_a/mu0_20mhz/config_file_o_du.dat | 2 - .../usecase/lte_a/mu0_20mhz/config_file_o_ru.dat | 6 +- .../app/usecase/lte_a/mu0_20mhz/usecase_du2.cfg | 72 + .../usecase/lte_a/mu0_20mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru.cfg | 1 + .../app/usecase/lte_a/mu0_20mhz/usecase_ru2.cfg | 72 + .../usecase/lte_a/mu0_20mhz/usecase_ru_icx2.cfg | 72 + .../usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_a/mu0_5mhz/config_file_o_du.dat | 4 - .../usecase/lte_a/mu0_5mhz/config_file_o_ru.dat | 6 +- fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du2.cfg | 72 + .../app/usecase/lte_a/mu0_5mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru.cfg | 1 + fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru2.cfg | 72 + .../app/usecase/lte_a/mu0_5mhz/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/1/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_10mhz/1/config_file_o_ru.dat | 49 +- .../app/usecase/lte_b/mu0_10mhz/1/usecase_du.cfg | 4 +- .../app/usecase/lte_b/mu0_10mhz/1/usecase_du2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/1/usecase_du_icx2.cfg | 72 + .../app/usecase/lte_b/mu0_10mhz/1/usecase_ru.cfg | 5 +- .../app/usecase/lte_b/mu0_10mhz/1/usecase_ru2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/1/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_b/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_b/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_b/mu0_10mhz/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_10mhz/config_file_o_ru.dat | 49 +- fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du.cfg | 4 +- .../app/usecase/lte_b/mu0_10mhz/usecase_du2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru.cfg | 5 +- .../app/usecase/lte_b/mu0_10mhz/usecase_ru2.cfg | 72 + .../usecase/lte_b/mu0_10mhz/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/1/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_20mhz/1/config_file_o_ru.dat | 49 +- .../app/usecase/lte_b/mu0_20mhz/1/usecase_du.cfg | 4 +- .../app/usecase/lte_b/mu0_20mhz/1/usecase_du2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/1/usecase_du_icx2.cfg | 72 + .../app/usecase/lte_b/mu0_20mhz/1/usecase_ru.cfg | 5 +- .../app/usecase/lte_b/mu0_20mhz/1/usecase_ru2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/1/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_b/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_b/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_b/mu0_20mhz/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_20mhz/config_file_o_ru.dat | 49 +- fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du.cfg | 4 +- .../app/usecase/lte_b/mu0_20mhz/usecase_du2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru.cfg | 5 +- .../app/usecase/lte_b/mu0_20mhz/usecase_ru2.cfg | 72 + .../usecase/lte_b/mu0_20mhz/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_5mhz/1/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_5mhz/1/config_file_o_ru.dat | 49 +- .../app/usecase/lte_b/mu0_5mhz/1/usecase_du.cfg | 4 +- .../app/usecase/lte_b/mu0_5mhz/1/usecase_du2.cfg | 72 + .../usecase/lte_b/mu0_5mhz/1/usecase_du_icx2.cfg | 72 + .../app/usecase/lte_b/mu0_5mhz/1/usecase_ru.cfg | 5 +- .../app/usecase/lte_b/mu0_5mhz/1/usecase_ru2.cfg | 72 + .../usecase/lte_b/mu0_5mhz/1/usecase_ru_icx2.cfg | 72 + .../usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du.xml | 2 +- .../usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du2.xml | 65 + .../lte_b/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml | 65 + .../usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru.xml | 6 +- .../usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru2.xml | 65 + .../lte_b/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml | 65 + .../usecase/lte_b/mu0_5mhz/config_file_o_du.dat | 47 +- .../usecase/lte_b/mu0_5mhz/config_file_o_ru.dat | 49 +- fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du.cfg | 4 +- fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du2.cfg | 72 + .../app/usecase/lte_b/mu0_5mhz/usecase_du_icx2.cfg | 72 + fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru.cfg | 5 +- fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru2.cfg | 72 + .../app/usecase/lte_b/mu0_5mhz/usecase_ru_icx2.cfg | 72 + fhi_lib/build.sh | 86 +- fhi_lib/lib/Makefile | 121 +- fhi_lib/lib/api/xran_compression.h | 8 + fhi_lib/lib/api/xran_compression.hpp | 5 + fhi_lib/lib/api/xran_cp_api.h | 102 +- fhi_lib/lib/api/xran_fh_o_du.h | 1308 +++- fhi_lib/lib/api/xran_fh_o_ru.h | 7 +- fhi_lib/lib/api/xran_lib_mlog_tasks_id.h | 62 +- fhi_lib/lib/api/xran_mlog_lnx.h | 8 + fhi_lib/lib/api/xran_pkt.h | 122 +- fhi_lib/lib/api/xran_pkt_cp.h | 76 +- fhi_lib/lib/api/xran_timer.h | 129 +- fhi_lib/lib/api/xran_transport.h | 13 +- fhi_lib/lib/api/xran_up_api.h | 32 +- fhi_lib/lib/build-oru/libxran-oru.a | Bin 0 -> 4576778 bytes .../v23.03/flexran_xran/lib/ethernet/xran_ethdi.o | Bin 0 -> 501264 bytes .../flexran_xran/lib/ethernet/xran_ethernet.o | Bin 0 -> 150336 bytes .../flexran_xran/lib/src/xran_bfp_cplane16.o | Bin 0 -> 26976 bytes .../flexran_xran/lib/src/xran_bfp_cplane16_snc.o | Bin 0 -> 35264 bytes .../flexran_xran/lib/src/xran_bfp_cplane32.o | Bin 0 -> 35096 bytes .../flexran_xran/lib/src/xran_bfp_cplane32_snc.o | Bin 0 -> 42160 bytes .../flexran_xran/lib/src/xran_bfp_cplane64.o | Bin 0 -> 57184 bytes .../flexran_xran/lib/src/xran_bfp_cplane64_snc.o | Bin 0 -> 53480 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o | Bin 0 -> 22120 bytes .../flexran_xran/lib/src/xran_bfp_cplane8_snc.o | Bin 0 -> 27560 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_ref.o | Bin 0 -> 3152 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_uplane.o | Bin 0 -> 36528 bytes .../flexran_xran/lib/src/xran_bfp_uplane_snc.o | Bin 0 -> 40192 bytes .../flexran_xran/lib/src/xran_bfp_uplane_spr.o | Bin 0 -> 640 bytes .../v23.03/flexran_xran/lib/src/xran_cb_proc.o | Bin 0 -> 144000 bytes .../v23.03/flexran_xran/lib/src/xran_common.o | Bin 0 -> 349824 bytes .../v23.03/flexran_xran/lib/src/xran_compression.o | Bin 0 -> 9192 bytes .../flexran_xran/lib/src/xran_compression_snc.o | Bin 0 -> 6192 bytes .../v23.03/flexran_xran/lib/src/xran_cp_api.o | Bin 0 -> 322792 bytes .../v23.03/flexran_xran/lib/src/xran_cp_proc.o | Bin 0 -> 280808 bytes .../flexran_xran/lib/src/xran_delay_measurement.o | Bin 0 -> 165536 bytes .../ashwini/v23.03/flexran_xran/lib/src/xran_dev.o | Bin 0 -> 136112 bytes .../flexran_xran/lib/src/xran_frame_struct.o | Bin 0 -> 61928 bytes .../v23.03/flexran_xran/lib/src/xran_main.o | Bin 0 -> 726656 bytes .../v23.03/flexran_xran/lib/src/xran_mem_mgr.o | Bin 0 -> 139240 bytes .../flexran_xran/lib/src/xran_mod_compression.o | Bin 0 -> 47800 bytes .../v23.03/flexran_xran/lib/src/xran_rx_proc.o | Bin 0 -> 143696 bytes .../v23.03/flexran_xran/lib/src/xran_sync_api.o | Bin 0 -> 47216 bytes .../v23.03/flexran_xran/lib/src/xran_timer.o | Bin 0 -> 108568 bytes .../v23.03/flexran_xran/lib/src/xran_transport.o | Bin 0 -> 58392 bytes .../v23.03/flexran_xran/lib/src/xran_tx_proc.o | Bin 0 -> 639056 bytes .../v23.03/flexran_xran/lib/src/xran_ul_tables.o | Bin 0 -> 76800 bytes .../v23.03/flexran_xran/lib/src/xran_up_api.o | Bin 0 -> 59936 bytes fhi_lib/lib/build-oru/obj/libxran-oru.dep | 1888 ++++++ fhi_lib/lib/build/libxran.a | Bin 0 -> 4578610 bytes .../v23.03/flexran_xran/lib/ethernet/xran_ethdi.o | Bin 0 -> 501264 bytes .../flexran_xran/lib/ethernet/xran_ethernet.o | Bin 0 -> 150328 bytes .../flexran_xran/lib/src/xran_bfp_cplane16.o | Bin 0 -> 26976 bytes .../flexran_xran/lib/src/xran_bfp_cplane16_snc.o | Bin 0 -> 35264 bytes .../flexran_xran/lib/src/xran_bfp_cplane32.o | Bin 0 -> 35096 bytes .../flexran_xran/lib/src/xran_bfp_cplane32_snc.o | Bin 0 -> 42160 bytes .../flexran_xran/lib/src/xran_bfp_cplane64.o | Bin 0 -> 57184 bytes .../flexran_xran/lib/src/xran_bfp_cplane64_snc.o | Bin 0 -> 53480 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o | Bin 0 -> 22120 bytes .../flexran_xran/lib/src/xran_bfp_cplane8_snc.o | Bin 0 -> 27560 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_ref.o | Bin 0 -> 3152 bytes .../v23.03/flexran_xran/lib/src/xran_bfp_uplane.o | Bin 0 -> 36528 bytes .../flexran_xran/lib/src/xran_bfp_uplane_snc.o | Bin 0 -> 40192 bytes .../flexran_xran/lib/src/xran_bfp_uplane_spr.o | Bin 0 -> 640 bytes .../v23.03/flexran_xran/lib/src/xran_cb_proc.o | Bin 0 -> 143992 bytes .../v23.03/flexran_xran/lib/src/xran_common.o | Bin 0 -> 349696 bytes .../v23.03/flexran_xran/lib/src/xran_compression.o | Bin 0 -> 9192 bytes .../flexran_xran/lib/src/xran_compression_snc.o | Bin 0 -> 6192 bytes .../v23.03/flexran_xran/lib/src/xran_cp_api.o | Bin 0 -> 323736 bytes .../v23.03/flexran_xran/lib/src/xran_cp_proc.o | Bin 0 -> 280936 bytes .../flexran_xran/lib/src/xran_delay_measurement.o | Bin 0 -> 165528 bytes .../ashwini/v23.03/flexran_xran/lib/src/xran_dev.o | Bin 0 -> 136112 bytes .../flexran_xran/lib/src/xran_frame_struct.o | Bin 0 -> 61928 bytes .../v23.03/flexran_xran/lib/src/xran_main.o | Bin 0 -> 729856 bytes .../v23.03/flexran_xran/lib/src/xran_mem_mgr.o | Bin 0 -> 139232 bytes .../flexran_xran/lib/src/xran_mod_compression.o | Bin 0 -> 47800 bytes .../v23.03/flexran_xran/lib/src/xran_rx_proc.o | Bin 0 -> 143352 bytes .../v23.03/flexran_xran/lib/src/xran_sync_api.o | Bin 0 -> 47216 bytes .../v23.03/flexran_xran/lib/src/xran_timer.o | Bin 0 -> 108560 bytes .../v23.03/flexran_xran/lib/src/xran_transport.o | Bin 0 -> 58384 bytes .../v23.03/flexran_xran/lib/src/xran_tx_proc.o | Bin 0 -> 637144 bytes .../v23.03/flexran_xran/lib/src/xran_ul_tables.o | Bin 0 -> 76800 bytes .../v23.03/flexran_xran/lib/src/xran_up_api.o | Bin 0 -> 59928 bytes fhi_lib/lib/build/obj/libxran.dep | 1888 ++++++ fhi_lib/lib/ethernet/xran_ethdi.c | 1501 +++++ fhi_lib/lib/ethernet/xran_ethdi.h | 174 + fhi_lib/lib/ethernet/xran_ethernet.c | 356 ++ fhi_lib/lib/ethernet/xran_ethernet.h | 103 + fhi_lib/lib/src/xran_bfp_byte_packing_utils.hpp | 210 +- fhi_lib/lib/src/xran_bfp_cplane16.cpp | 6 +- fhi_lib/lib/src/xran_bfp_cplane16_snc.cpp | 19 +- fhi_lib/lib/src/xran_bfp_cplane32.cpp | 6 +- fhi_lib/lib/src/xran_bfp_cplane32_snc.cpp | 23 +- fhi_lib/lib/src/xran_bfp_cplane64.cpp | 10 +- fhi_lib/lib/src/xran_bfp_cplane64_snc.cpp | 25 +- fhi_lib/lib/src/xran_bfp_cplane8.cpp | 6 +- fhi_lib/lib/src/xran_bfp_cplane8_snc.cpp | 21 +- fhi_lib/lib/src/xran_bfp_ref.cpp | 49 + fhi_lib/lib/src/xran_bfp_uplane.cpp | 13 +- fhi_lib/lib/src/xran_bfp_uplane_snc.cpp | 116 +- fhi_lib/lib/src/xran_bfp_uplane_spr.cpp | 397 ++ fhi_lib/lib/src/xran_cb_proc.c | 682 +- fhi_lib/lib/src/xran_cb_proc.h | 17 +- fhi_lib/lib/src/xran_common.c | 1824 ++++-- fhi_lib/lib/src/xran_common.h | 133 +- fhi_lib/lib/src/xran_compression.cpp | 142 +- fhi_lib/lib/src/xran_compression_snc.cpp | 81 +- fhi_lib/lib/src/xran_cp_api.c | 1245 ++-- fhi_lib/lib/src/xran_cp_proc.c | 1596 +++-- fhi_lib/lib/src/xran_cp_proc.h | 261 +- fhi_lib/lib/src/xran_delay_measurement.c | 211 +- fhi_lib/lib/src/xran_dev.c | 271 +- fhi_lib/lib/src/xran_dev.h | 546 +- fhi_lib/lib/src/xran_frame_struct.c | 99 +- fhi_lib/lib/src/xran_frame_struct.h | 13 +- fhi_lib/lib/src/xran_main.c | 6744 ++++++++++++-------- fhi_lib/lib/src/xran_main.h | 12 +- fhi_lib/lib/src/xran_mem_mgr.c | 613 +- fhi_lib/lib/src/xran_mod_compression.cpp | 20 +- fhi_lib/lib/src/xran_mod_compression.h | 194 +- fhi_lib/lib/src/xran_prach_cfg.h | 45 +- fhi_lib/lib/src/xran_printf.h | 4 - fhi_lib/lib/src/xran_rx_proc.c | 724 ++- fhi_lib/lib/src/xran_rx_proc.h | 32 +- fhi_lib/lib/src/xran_sync_api.c | 2 +- fhi_lib/lib/src/xran_timer.c | 716 ++- fhi_lib/lib/src/xran_transport.c | 35 +- fhi_lib/lib/src/xran_tx_proc.c | 3347 +++++++--- fhi_lib/lib/src/xran_tx_proc.h | 55 +- fhi_lib/lib/src/xran_ul_tables.c | 86 +- fhi_lib/lib/src/xran_up_api.c | 234 +- fhi_lib/test/common/common.cpp | 24 +- fhi_lib/test/common/common.hpp | 10 +- fhi_lib/test/common/common_typedef_xran.h | 15 +- fhi_lib/test/common/json.hpp | 14 +- fhi_lib/test/common/xran_lib_wrap.hpp | 563 +- fhi_lib/test/master.py | 1077 +++- fhi_lib/test/test_xran/Makefile | 74 +- fhi_lib/test/test_xran/c_plane_tests.cc | 52 +- fhi_lib/test/test_xran/chain_tests.cc | 43 +- fhi_lib/test/test_xran/compander_functional.cc | 53 +- fhi_lib/test/test_xran/conf.json | 59 +- fhi_lib/test/test_xran/init_sys_functional.cc | 222 +- fhi_lib/test/test_xran/prach_functional.cc | 49 +- fhi_lib/test/test_xran/prach_performance.cc | 131 +- fhi_lib/test/test_xran/u_plane_functional.cc | 21 +- fhi_lib/test/test_xran/u_plane_performance.cc | 61 +- wls_lib/Makefile | 69 +- wls_lib/build.sh | 51 +- wls_lib/syslib.c | 514 +- wls_lib/syslib.h | 24 +- wls_lib/testapp/Makefile | 71 +- wls_lib/testapp/make/obj/pool.o | Bin 0 -> 46416 bytes wls_lib/testapp/make/obj/testapp.o | Bin 0 -> 121064 bytes wls_lib/testapp/make/obj/wls_test.dep | 11 + wls_lib/testapp/pool.c | 43 +- wls_lib/testapp/pool.h | 18 +- wls_lib/testapp/testapp.c | 113 +- wls_lib/testapp/wls_test.sh | 30 +- wls_lib/ttypes.h | 18 +- wls_lib/wls.h | 41 +- wls_lib/wls_lib.h | 206 +- wls_lib/wls_lib_dpdk.c | 2531 ++++---- 2720 files changed, 199648 insertions(+), 20021 deletions(-) create mode 100755 fhi_lib/app/pcie_addresses.sh create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_1.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_0.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_1.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx0.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx1.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx3.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx4.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx5.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx6.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx7.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx8.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx9.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx0.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx1.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx3.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx4.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx5.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx6.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx7.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx8.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx9.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_a_b/201/config_file_o_du0.dat create mode 100755 fhi_lib/app/usecase/cat_a_b/201/config_file_o_du1.dat create mode 100644 fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru0.dat create mode 100755 fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru1.dat create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_a_b/201/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du_1.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru_1.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377_dynamic.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376_dynamic.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_dynamic.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_du_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du_1.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru_1.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru_tst377.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_du.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_du_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_ru_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_du_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_ru_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_du_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_ru_tst376.dat create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru2.cfg create mode 100755 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_du_tst451.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_ru_tst451.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_du_tst389.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_ru_tst389.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_du_tst389.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_ru_tst389.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_3.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_0.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_1.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_csx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml create mode 100755 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_du_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_ru_tst376.dat create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx.cfg create mode 100644 fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du_nb.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru_nb.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du_nb.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru_nb.dat create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du_icx2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru2.cfg create mode 100644 fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru_icx2.cfg create mode 100644 fhi_lib/lib/build-oru/libxran-oru.a create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_ref.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression_snc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_main.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_sync_api.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_timer.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.o create mode 100644 fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_up_api.o create mode 100644 fhi_lib/lib/build-oru/obj/libxran-oru.dep create mode 100644 fhi_lib/lib/build/libxran.a create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_ref.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression_snc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_main.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_sync_api.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_timer.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.o create mode 100644 fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_up_api.o create mode 100644 fhi_lib/lib/build/obj/libxran.dep create mode 100644 fhi_lib/lib/ethernet/xran_ethdi.c create mode 100644 fhi_lib/lib/ethernet/xran_ethdi.h create mode 100644 fhi_lib/lib/ethernet/xran_ethernet.c create mode 100644 fhi_lib/lib/ethernet/xran_ethernet.h create mode 100644 fhi_lib/lib/src/xran_bfp_uplane_spr.cpp create mode 100644 wls_lib/testapp/make/obj/pool.o create mode 100644 wls_lib/testapp/make/obj/testapp.o create mode 100644 wls_lib/testapp/make/obj/wls_test.dep diff --git a/Dockerfile b/Dockerfile index 2688cc6..c04d8a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,24 +13,22 @@ # See the License for the specific language governing permissions and # # limitations under the License. # ################################################################################ -FROM centos:centos7.7.1908 AS builder +FROM ubuntu:22.04 AS builder ENV https_proxy $https_proxy ENV http_proxy $http_proxy ENV no_proxy $no_proxy -ARG icc_license_file - WORKDIR /opt/o-du/phy ENV BUILD_DIR /opt/o-du/phy ENV XRAN_DIR $BUILD_DIR/fhi_lib +RUN apt update +RUN apt upgrade -y + ###Install required libs -RUN yum install -y libhugetlbfs-utils libhugetlbfs-devel libhugetlbfs numactl-devel ethtool gcc make module-init-tools kmod patch xz iproute pciutils python vim cmake unzip nano mc iputils-ping libaio libaio-devel net-tools wget zip +RUN apt install -y build-essential libhugetlbfs-bin libhugetlbfs-dev libtool-bin cmake python3-pip tcpdump net-tools bc cmake wget pciutils vim tcpdump ntpdate driverctl lshw numactl linux-tools-common libnuma-dev xterm pkg-config rt-tests git libtool libcrypto++-dev linux-tools-generic vim python3 pciutils -###Install some libs to compile DPDK -RUN yum groupinstall -y "Development Tools" -RUN yum install -y ncurses-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel bc libstdc++-4.8.5-28.el7_5.1.x86_64 gcc-c++ libstdc++-devel-4.8.5-28.el7_5.1.x86_64 autoconf-2.69-11.el7.noarch ###googletest is required for XRAN unittests build and run RUN wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz && \ @@ -41,101 +39,91 @@ RUN cd $GTEST_DIR && \ g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc && \ ar -rv libgtest.a gtest-all.o && cd build-aux/ && cmake $GTEST_DIR && make && cd .. && ln -s build-aux/libgtest_main.a libgtest_main.a -###Before install ISS, please go to Intel site to get a free license: https://software.intel.com/en-us/system-studio/choose-download -COPY $icc_license_file $BUILD_DIR/license.lic -####Download Intel System Studio from Intel website and install ICC -RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/16789/system_studio_2020_u2_ultimate_edition_offline.tar.gz && \ - cd /opt && mkdir intel && cp $BUILD_DIR/license.lic intel/license.lic && \ - tar -zxvf $BUILD_DIR/system_studio_2020_u2_ultimate_edition_offline.tar.gz && \ - cd system_studio_2020_u2_ultimate_edition_offline/ && \ - sed -i "s/ACCEPT_EULA.*/ACCEPT_EULA=accept/" silent.cfg && \ - sed -i "s/PSET_INSTALL_DIR.*/PSET_INSTALL_DIR=\/opt\/intel/" silent.cfg && \ - sed -i "s/.*ACTIVATION_LICENSE_FILE.*/ACTIVATION_LICENSE_FILE=\/opt\/intel\/license.lic/" silent.cfg && \ - sed -i "s/ACTIVATION_TYPE.*/ACTIVATION_TYPE=license_file/" silent.cfg && \ - ./install.sh -s silent.cfg +##RUN wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19079/l_BaseKit_p_2023.0.0.25537_offline.sh +##RUN chmod +x l_BaseKit_p_2023.0.0.25537_offline.sh +##RUN ./l_BaseKit_p_2023.0.0.25537_offline.sh -a -s --eula accept --install-dir /opt/backups/intel/oneapi -###Set env for ICC -RUN source /opt/intel/system_studio_2020/bin/iccvars.sh intel64 -ENV PATH /opt/intel/system_studio_2020/bin/:$PATH +##RUN ln -sf /opt/intel/oneapi/compiler/2023.0.0/ /opt/intel/oneapi/compiler/latest +##RUN source /opt/intel/oneapi/setvars.sh --force +##ENV PATH /opt/intel/oneapi/compiler/2023.0.0/linux/bin-llvm:$PATH ####Download and build DPDK -ENV RTE_TARGET x86_64-native-linuxapp-icc -ENV RTE_SDK /opt/o-du/dpdk-19.11 -RUN wget http://fast.dpdk.org/rel/dpdk-19.11.tar.xz && \ - tar -xf dpdk-19.11.tar.xz && \ - mv dpdk-19.11 $RTE_SDK && \ - cd $RTE_SDK && \ - make config T=$RTE_TARGET O=$RTE_TARGET && \ - cd $RTE_SDK/$RTE_TARGET && \ - sed -i "s/CONFIG_RTE_EAL_IGB_UIO=y/CONFIG_RTE_EAL_IGB_UIO=n/" .config && \ - sed -i "s/CONFIG_RTE_KNI_KMOD=y/CONFIG_RTE_KNI_KMOD=n/" .config && \ - make +#ENV RTE_TARGET x86_64-native-linuxapp-icc +#ENV RTE_SDK /opt/o-du/dpdk-22.11 +#RUN wget http://static.dpdk.org/rel/dpdk-22.11.1.tar.xz && \ +# tar -xf dpdk-22.11.1.tar.xz && \ +# mv dpdk-stable-22.11.1 $RTE_SDK && \ +# cd $RTE_SDK && \ +# make config T=$RTE_TARGET O=$RTE_TARGET && \ +# cd $RTE_SDK/$RTE_TARGET && \ +# sed -i "s/CONFIG_RTE_EAL_IGB_UIO=y/CONFIG_RTE_EAL_IGB_UIO=n/" .config && \ +# sed -i "s/CONFIG_RTE_KNI_KMOD=y/CONFIG_RTE_KNI_KMOD=n/" .config && \ +# make ####Install octave. Issue when downloading octave. And the octave will take 500MB space. -RUN yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y && \ - yum install octave -y +#RUN apt install octave -y ####Install expect -RUN yum install -y expect +#RUN apt install -y expect ###Copy XRAN source code into docker image -COPY fhi_lib $BUILD_DIR/fhi_lib -COPY misc $BUILD_DIR/misc +#COPY fhi_lib $BUILD_DIR/fhi_lib +#COPY misc $BUILD_DIR/misc -ENV WIRELESS_SDK_TARGET_ISA avx512 +#ENV WIRELESS_SDK_TARGET_ISA avx512 ####Download and Build FlexRAN FEC SDK, not needed for run L1 #RUN cd $BUILD_DIR/ && wget https://software.intel.com/sites/default/files/managed/23/b8/FlexRAN-FEC-SDK-19-04.tar.gz && tar -zxvf #FlexRAN-FEC-SDK-19-04.tar.gz && misc/extract-flexran-fec-sdk.ex && cd FlexRAN-FEC-SDK-19-04/sdk && source #/opt/intel/system_studio_2019/bin/iccvars.sh intel64 && ./create-makefiles-linux.sh && cd build-avx512-icc && #make && make install ####Build XRAN lib, unittests, sample app -RUN cd $BUILD_DIR/fhi_lib/ && export XRAN_LIB_SO=1 && ./build.sh xclean && ./build.sh && cd app && octave gen_test.m +#RUN cd $BUILD_DIR/fhi_lib/ && export XRAN_LIB_SO=1 && ./build.sh xclean && ./build.sh && cd app && octave gen_test.m ####Build wls lib -COPY wls_lib $BUILD_DIR/wls_lib -RUN cd $BUILD_DIR/wls_lib && ./build.sh xclean && ./build.sh -ENV DIR_WIRELESS_WLS $BUILD_DIR/wls_lib +#COPY wls_lib $BUILD_DIR/wls_lib +#RUN cd $BUILD_DIR/wls_lib && ./build.sh xclean && ./build.sh +#ENV DIR_WIRELESS_WLS $BUILD_DIR/wls_lib ####Clone FlexRAN repo from Github RUN cd /opt/o-du && git clone https://github.com/intel/FlexRAN.git ENV DIR_WIRELESS=/opt/o-du/FlexRAN/l1/ ####Build 5g fapi -COPY fapi_5g $BUILD_DIR/fapi_5g -ENV DIR_WIRELESS_ORAN_5G_FAPI $BUILD_DIR/fapi_5g -ENV DEBUG_MODE true -RUN cd $BUILD_DIR/fapi_5g/build && ./build.sh xclean && ./build.sh +#COPY fapi_5g $BUILD_DIR/fapi_5g +#ENV DIR_WIRELESS_ORAN_5G_FAPI $BUILD_DIR/fapi_5g +#ENV DEBUG_MODE true +#RUN cd $BUILD_DIR/fapi_5g/build && ./build.sh xclean && ./build.sh ####Copy other folders/files -COPY setupenv.sh $BUILD_DIR +#COPY setupenv.sh $BUILD_DIR ####Unset network proxy -RUN unset http_proxy https_prox ftp_proxy no_proxy +#RUN unset http_proxy https_prox ftp_proxy no_proxy ####Copy built binaries/libraries into docker images -FROM centos:centos7.7.1908 -ENV TARGET_DIR /opt/o-du/ -COPY --from=builder $TARGET_DIR/phy $TARGET_DIR/phy -COPY --from=builder $TARGET_DIR/FlexRAN $TARGET_DIR/FlexRAN +#FROM ubuntu:22.04 +#ENV TARGET_DIR /opt/o-du/ +#COPY --from=builder $TARGET_DIR/phy $TARGET_DIR/phy +#COPY --from=builder $TARGET_DIR/FlexRAN $TARGET_DIR/FlexRAN -###Install required libs -RUN yum install -y libhugetlbfs-utils libhugetlbfs-devel libhugetlbfs numactl-devel ethtool gcc make module-init-tools kmod patch xz iproute pciutils python vim cmake unzip nano mc iputils-ping libaio libaio-devel net-tools wget zip +#RUN apt update +#RUN apt upgrade -y -###Install some libs to compile DPDK -RUN yum groupinstall -y "Development Tools" -RUN yum install -y ncurses-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel bc libstdc++-4.8.5-28.el7_5.1.x86_64 gcc-c++ libstdc++-devel-4.8.5-28.el7_5.1.x86_64 autoconf-2.69-11.el7.noarch +###Install required libs +#RUN apt install -y build-essential libhugetlbfs-bin libhugetlbfs-dev libtool-bin cmake python3-pip tcpdump net-tools bc cmake wget pciutils vim tcpdump ntpdate driverctl lshw numactl linux-tools-common libnuma-dev xterm pkg-config rt-tests git libtool libcrypto++-dev linux-tools-generic vim python3 pciutils ###googletest is required for XRAN unittests build and run -RUN wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz && \ - cd /opt && tar -zxvf $BUILD_DIR/release-1.7.0.tar.gz -ENV GTEST_ROOT /opt/googletest-release-1.7.0 -ENV GTEST_DIR /opt/googletest-release-1.7.0 -RUN cd $GTEST_DIR && \ - g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc && \ - ar -rv libgtest.a gtest-all.o && cd build-aux/ && cmake $GTEST_DIR && make && cd .. && ln -s build-aux/libgtest_main.a libgtest_main.a +#RUN wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz && \ +# cd /opt && tar -zxvf $BUILD_DIR/release-1.7.0.tar.gz +#ENV GTEST_ROOT /opt/googletest-release-1.7.0 +#ENV GTEST_DIR /opt/googletest-release-1.7.0 +#RUN cd $GTEST_DIR && \ +# g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc && \ +# ar -rv libgtest.a gtest-all.o && cd build-aux/ && cmake $GTEST_DIR && make && cd .. && ln -s build-aux/libgtest_main.a libgtest_main.a -RUN yum install -y expect +#RUN apt install -y expect -WORKDIR $TARGET_DIR +#WORKDIR $TARGET_DIR -LABEL description="ORAN O-DU PHY Applications" +#LABEL description="ORAN O-DU PHY Applications" +# diff --git a/fhi_lib/app/Makefile b/fhi_lib/app/Makefile index 1f7f9d0..e3b00f7 100644 --- a/fhi_lib/app/Makefile +++ b/fhi_lib/app/Makefile @@ -24,11 +24,11 @@ MYCUSTOMSPACE1='------------------------------------------------------------' # Tools configuration ############################################################## ifeq ($(WIRELESS_SDK_TOOLCHAIN),icc) -CC := icc -CPP := icpc -AS := as -AR := ar -LD := icc + CC := icc + CPP := icpc + AS := as + AR := ar + LD := icc else ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) CC := icx CPP := icpx @@ -38,7 +38,6 @@ else ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) else $(error "Please define WIRELESS_SDK_TOOLCHAIN environment variable") endif -OBJDUMP := objdump ifeq ($(SHELL),cmd.exe) MD := mkdir.exe -p @@ -67,10 +66,11 @@ ifeq ($(RTE_SDK),) endif RTE_TARGET ?= x86_64-native-linuxapp-gcc -RTE_INC := $(shell PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk) +RTE_INC := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk) API_DIR := $(XRAN_DIR)/lib/api OWD_DIR := $(XRAN_DIR)/lib/src +ETHDI_DIR := $(XRAN_DIR)/lib/ethernet SRC_DIR := $(PROJECT_DIR)/src ifeq ($(MLOG),1) @@ -116,7 +116,7 @@ CC_FLAGS += -wd1786 -xcore-avx512 endif ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) -CC_FLAGS += -xcore-avx512 -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error +CC_FLAGS += -march=skylake-avx512 -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error endif CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe -no-prec-div \ @@ -132,7 +132,7 @@ ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) CPP_FLAGS += -fp-model fast -march=icelake-server -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error endif -INC := -I$(API_DIR) -I$(RTE_INC) -I$(OWD_DIR) +INC := -I$(API_DIR) -I$(RTE_INC) -I$(OWD_DIR) -I$(ETHDI_DIR) DEF := ifeq ($(MLOG),1) @@ -155,20 +155,27 @@ else DEF += -UXRAN_O_RU_BUILD endif +ifeq ($(POLL_EBBU_OFFLOAD),1) + DEF += -DPOLL_EBBU_OFFLOAD +else + DEF += -UPOLL_EBBU_OFFLOAD +endif + +DEF += -DXRAN_SAMPLEAPP_BUILD ifeq ($(ORU),1) XRAN_LIB_DIR=$(XRAN_DIR)/lib/build-oru LD_FLAGS += -L$(XRAN_LIB_DIR) -lxran-oru else -XRAN_LIB_DIR=$(XRAN_DIR)/lib/build -LD_FLAGS += -L$(XRAN_LIB_DIR) -lxran + XRAN_LIB_DIR=$(XRAN_DIR)/lib/build + LD_FLAGS += -L$(XRAN_LIB_DIR) -lxran endif -RTE_LIBS = $(shell PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --static --libs libdpdk) +RTE_LIBS = $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --static --libs libdpdk) LD_FLAGS += $(RTE_LIBS) ifeq ($(MLOG),1) - LD_FLAGS += -L$(MLOG_DIR)/bin -lmlog +LD_FLAGS += -L$(MLOG_DIR)/bin -lmlog endif ifeq ($(FWK),1) @@ -183,12 +190,13 @@ AS_FLAGS := AR_FLAGS := rc PROJECT_OBJ_DIR := $(BUILDDIR)/obj +PROJECT_DEP_DIR := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep.d CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC)) CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC)) AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC)) OBJS := $(CC_OBJS) $(CPP_OBJS) $(AS_OBJS) $(LIBS) -DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS)))) +DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS)))) $(PROJECT_DEP_DIR) CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS)) CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS)) @@ -200,9 +208,7 @@ CPP_FLAGS_FULL := $(CPP_FLAGS) $(INC) $(DEF) AS_FLAGS := $(AS_FLAGS) $(INC) -PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep - -ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE)) +ifeq ($(wildcard $(PROJECT_DEP_DIR)),$(PROJECT_DEP_DIR)) GENERATE_DEPS := else @@ -211,19 +217,28 @@ CPP_DEPS := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC))) GENERATE_DEPS := generate_deps endif +#Add CodeCoverage option +ifeq ($(CODE_COVERAGE),1) + CC_FLAGS += -fprofile-instr-generate -fcoverage-mapping + CXX_FLAGS += -fprofile-instr-generate -fcoverage-mapping + LD_FLAGS += -fprofile-instr-generate +endif + all : welcome_line $(PROJECT_BINARY) @echo $(PROJECT_BINARY) .PHONY : clear_dep clear_dep: - @$(RM) $(PROJECT_DEP_FILE) - @echo [DEP] $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE)) + @echo [DEP] rm $(PROJECT_DEP_DIR)/$(@F).dep + @$(RM) $(PROJECT_DEP_DIR)/$(@F).dep -$(CC_DEPS) : - @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE) +$(CC_DEPS) : $(PROJECT_DEP_DIR) + @echo [DEP] $(subst __up__,../,$(subst __dep__,,$@)) + @$(CC) $(CC_FLAGS_FULL) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) >> $(PROJECT_DEP_DIR)/$(@F).dep -$(CPP_DEPS) : - @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE) +$(CPP_DEPS) : $(PROJECT_DEP_DIR) + @echo [DEP] $(subst __up__,../,$(subst __dep__,,$@)) + @$(CPP) $(CPP_FLAGS_FULL) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) >> $(PROJECT_DEP_DIR)/$(@F).dep .PHONY : generate_deps generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS) @@ -236,21 +251,21 @@ echo_start_build : $(DIRLIST) : -@$(MD) $@ -$(CC_OBJTARGETS) : +$(CC_OBJTARGETS) : $(GENERATE_DEPS) @echo [CC] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -$(CPP_OBJTARGETS) : +$(CPP_OBJTARGETS) : $(GENERATE_DEPS) @echo [CPP] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -$(AS_OBJTARGETS) : +$(AS_OBJTARGETS) : $(CC_OBJTARGETS) $(CPP_OBJTARGETS) @echo [AS] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE)) +ifeq ($(wildcard $(PROJECT_DEP_DIR)),$(PROJECT_DEP_DIR)) -include $(PROJECT_DEP_FILE) +include $(PROJECT_DEP_DIR)/* endif @@ -262,7 +277,7 @@ clean: xclean: clean ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),) @echo [XCLEAN] : $(PROJECT_NAME) - @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE) + @$(RM) -rf $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_DIR) endif .PHONY : welcome_line @@ -278,10 +293,9 @@ welcome_line : debug : all release : all -$(PROJECT_BINARY): $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS) +$(PROJECT_BINARY): $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS) @$(MD) $(BUILDDIR) @echo "[LD] $@ " @$(LD) -o $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(AS_OBJTARGETS) $(LD_FLAGS) -Wl,-L $(BUILDDIR) -lrt -lpthread #@echo [APP] $@ -#@$(OBJDUMP) -d $(PROJECT_BINARY) > $(PROJECT_BINARY).asm diff --git a/fhi_lib/app/gen_test.m b/fhi_lib/app/gen_test.m index eb345b2..3c90300 100644 --- a/fhi_lib/app/gen_test.m +++ b/fhi_lib/app/gen_test.m @@ -1,31 +1,24 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Copyright (c) 2021 Intel. -% -% Licensed under the Apache License, Version 2.0 (the "License"); -% you may not use this file except in compliance with the License. -% You may obtain a copy of the License at -% -% http://www.apache.org/licenses/LICENSE-2.0 -% -% Unless required by applicable law or agreed to in writing, software -% distributed under the License is distributed on an "AS IS" BASIS, -% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -% See the License for the specific language governing permissions and -% limitations under the License. -% +% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%This script was tested with GNU Octave, version 3.8.2 or Matlab 9.2.0.538062 (R2017a) +%This script was tested with GNU Octave, version 3.8.2 or Matlab 9.2.0.538062 (R2017a) -close all; -clear all; +function []=gen_test(start_test, end_test) - % 5MHz 10MHz 15MHz 20 MHz +if nargin < 1 + start_test = 0; + end_test = 0; +elseif nargin < 2 + end_test = start_test; +end + + % 5MHz 10MHz 15MHz 20 MHz nLteNumRbsPerSymF1 = ... [ - % 5MHz 10MHz 15MHz 20 MHz + % 5MHz 10MHz 15MHz 20 MHz [25, 50, 75, 100] % Numerology 0 (15KHz) ]; @@ -34,8 +27,8 @@ nNumRbsPerSymF1 = ... [ % 5MHz 10MHz 15MHz 20 MHz 25 MHz 30 MHz 40 MHz 50MHz 60 MHz 70 MHz 80 MHz 90 MHz 100 MHz [25, 52, 79, 106, 133, 160, 216, 270, 0, 0, 0, 0, 0] % Numerology 0 (15KHz) - [11, 24, 38, 51, 65, 78, 106, 133, 162, 0, 217, 245, 273] % Numerology 1 (30KHz) - [0, 11, 18, 24, 31, 38, 51, 65, 79, 0, 107, 121, 135] % Numerology 2 (60KHz) + [11, 24, 38, 51, 65, 78, 106, 133, 162, 189, 217, 245, 273] % Numerology 1 (30KHz) + [0, 11, 18, 24, 31, 38, 51, 65, 79, 93, 107, 121, 135] % Numerology 2 (60KHz) ]; nNumRbsPerSymF2 = ... @@ -46,46 +39,51 @@ nNumRbsPerSymF2 = ... ]; % total number of tests -tests_total = 15 +tests_total = 22; + tech_all = ... % 0 - NR 1- LTE - [ - 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2 - ] + [ + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0 + ]; -sub6_all = ... - [ - true, true, true, true, false, true, true, true, true, true, true, true, true, true, true - ] +freq_range_all = ...% 1 - FR1 (sub6), 2 - FR2 (mmWave) + [ + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ]; mu_all = ... [ - 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] + 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 + ]; bw_all = ... [ - 5, 10, 20, 100, 100, 100, 20, 10, 5, 20, 10, 5, 20, 10, 5 - ] + 5, 10, 20, 40, 100, 100, 100, 20, 10, 5, ... + 20, 10, 5, 20, 10, 5, 50, 10, 60, 80, ... + 10, 60 + ]; ant_num_all = ... [ - 4, 4, 4, 4, 4, 8, 4, 4, 4, 8, 8, 8, 4, 4, 4 - ] + 4, 4, 4, 4, 8, 4, 8, 8, 4, 4, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4 + ]; bfw_gen_all = ... [ - false, false, false, false, false, true, false, false, false, true, true, true, false, false, false - ] + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 + ]; trx_all = ... - [ - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 - ] -path_to_usecase_all = ... + [ + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 + ]; + +path_to_usecase_all = ... [ "./usecase/cat_a/mu0_5mhz/"; "./usecase/cat_a/mu0_10mhz/"; "./usecase/cat_a/mu0_20mhz/"; + "./usecase/cat_a/mu1_20mhz/"; "./usecase/cat_a/mu1_100mhz/"; "./usecase/cat_a/mu3_100mhz/"; "./usecase/cat_b/mu1_100mhz/"; @@ -94,36 +92,59 @@ path_to_usecase_all = ... "./usecase/lte_a/mu0_5mhz/"; "./usecase/lte_b/mu0_20mhz/"; "./usecase/lte_b/mu0_10mhz/"; - "./usecase/lte_b/mu0_5mhz/"; + "./usecase/lte_b/mu0_5mhz/"; "./usecase/dss/mu0_20mhz/"; "./usecase/dss/mu0_10mhz/"; "./usecase/dss/mu0_5mhz/"; - ] + "./usecase/cat_a/mu0_50mhz/"; + "./usecase/cat_a/mu1_10mhz/"; + "./usecase/cat_a/mu1_60mhz/"; + "./usecase/cat_a/mu1_80mhz/"; + "./usecase/cat_b/mu1_10mhz/"; + "./usecase/cat_b/mu1_60mhz/"; + ]; -path_to_usecase_all = cellstr(path_to_usecase_all) +path_to_usecase_all = cellstr(path_to_usecase_all); nSlots_all = ... [ - 20,20,20,20,20,20,20,20,20,10,10,10,20,20,20 - ] + 20,20,20,20,20,20,20,20,20,20,10,10,10,20,20,20,20,20,20,20,20,20 + ]; + +if (start_test <= tests_total) && (end_test <= tests_total) + if (start_test == 0) && (end_test == 0) % generate all tests + start_test = 1; + end_test = tests_total; + end +else + error_msg = sprintf('start_test and end_test must be up to %d', tests_total); + disp(error_msg) + return +end %select mu and bw to generate test files -for test_num =(1:1:tests_total) - test_num - isLte=tech_all(test_num) %false - sub6=sub6_all(test_num) %false - mu=mu_all(test_num) % 0,1, or 3 - bw=bw_all(test_num) %5,10,20,100 MHz - ant_num = ant_num_all(test_num) - bfw_gen=bfw_gen_all(test_num) - trx = trx_all(test_num) - size(path_to_usecase_all) - path_to_usecase = path_to_usecase_all(test_num) - - nSlots=nSlots_all(test_num) % any 40 and 160 +for test_num =(start_test:1:end_test) + %test_num + isLte=tech_all(test_num); %false + if freq_range_all(test_num) == 1 + sub6 = true; + else + sub6 = false; + end + mu=mu_all(test_num); % 0,1, or 3 + bw=bw_all(test_num); %5,10,20,100 MHz + ant_num = ant_num_all(test_num); + bfw_gen=bfw_gen_all(test_num); + trx = trx_all(test_num); + %size(path_to_usecase_all) + path_to_usecase = cell2mat(path_to_usecase_all(test_num)); + %disp(path_to_usecase) + + nSlots=nSlots_all(test_num); % any 40 and 160 if isLte - disp('LTE') + %disp('LTE') + test_tech = 'LTE'; if mu < 3 nNumerology = mu+1; switch (bw) @@ -139,7 +160,8 @@ for test_num =(1:1:tests_total) end else if sub6 - disp('Sub6') + %disp('Sub6') + test_tech = 'Sub6'; if mu < 3 nNumerology = mu+1; switch (bw) @@ -174,7 +196,8 @@ for test_num =(1:1:tests_total) end end else - disp('mmWave') + %disp('mmWave') + test_tech = 'mmWave'; if (mu >=2) && (mu <= 3) nNumerology = mu; switch (bw) @@ -192,14 +215,18 @@ for test_num =(1:1:tests_total) end end end + if numRBs ==0 disp('Incorrect Numerology and BW combination.') return end - bw - numRBs - nSlots + test_info = sprintf('Test %2d: %6s, mu %d, bw %3d, n_ant %d, n_slots %d, numRB %3d', test_num, test_tech, mu, bw, ant_num, nSlots, numRBs); + disp(test_info) + + %bw + %numRBs + %nSlots %use file as input %ifft_in = load('ifft_in.txt') @@ -213,85 +240,110 @@ for test_num =(1:1:tests_total) ant_c = [ant_c; ifft_in_1]; end - %write files for IQ samples + %write files for IQ samples + if test_num == 8 + ant_num = 8; + end + for ant = 1:1:ant_num antX=ant_c*(ant*10); antX_16=int16(antX.'); file_name = strcat(path_to_usecase,"ant_", num2str(ant-1),".bin"); - disp(file_name) + %disp(file_name) fileID = fopen(file_name,'w'); fwrite(fileID, antX_16, 'int16'); - fclose(fileID); + fclose(fileID); + end + + if test_num == 8 + ant_num = 12; + ifft_in48re = [[1:1:(numRBs*48)]', [1:1:(numRBs*48)]']; + ant_c = ifft_in48re; + for (i=1:1:nSlots*14-1) + ifft_in_1 = ifft_in48re + i; + ant_c = [ant_c; ifft_in_1]; + end + + %write files for IQ samples + for ant = 9:1:ant_num + antX=ant_c*(ant*10); + antX_16=int16(antX.'); + file_name = strcat(path_to_usecase,"ant_", num2str(ant-1),".bin"); + %disp(file_name) + fileID = fopen(file_name,'w'); + fwrite(fileID, antX_16, 'int16'); + fclose(fileID); + end end if bfw_gen - disp('Generate BF Weights per RB') + disp(' Generate BF Weights per RB') - %seed to make it repeatable + %seed to make it repeatable rand('seed',47) - %random channel matrix for single sym on syngle RB + %random channel matrix for single sym on syngle RB H = (rand(trx,ant_num) + 1j*rand(trx,ant_num)); - %calculate weights + %calculate weights % W_dl = H^*(H^TH^*)^-1 % W_ul = ((H^H*H)^-1)H^H - % where H^* - conjugate + % where H^* - conjugate % H^T - transpose - % H^H - conjugate transpose + % H^H - conjugate transpose W_dl = conj(H)*(transpose(H)*conj(H))^-1; %weights for DL W_ul = ((ctranspose(H)*H)^-1)*ctranspose(H); %weights for UL W_ul = W_ul.'; for ant = 1:1:ant_num - %DL + %DL bfw_per_sym = []; - % adjust channel per each RB + % adjust channel per each RB for iPrb = 1:1:numRBs bfw_per_sym = [ bfw_per_sym, [real((W_dl(:, ant).'))*iPrb; imag((W_dl(:, ant).'))*iPrb]]; end bfw_all_slots = []; - %reuse channel for all symbols + %reuse channel for all symbols for (slot_idx=1:1:nSlots*14) bfw_all_slots = [bfw_all_slots, bfw_per_sym]; end bfw_all_slots_int = int16(bfw_all_slots./max(max(abs((bfw_all_slots.')))).*2^15); - %write files for IQ samples + %write files for IQ samples antX_16=bfw_all_slots_int.'; file_name = strcat(path_to_usecase,"dl_bfw_ue_", num2str(ant-1),".bin"); - disp(file_name) + %disp(file_name) fileID = fopen(file_name,'w'); fwrite(fileID,antX_16, 'int16'); - fclose(fileID); + fclose(fileID); - %UL + %UL bfw_per_sym = []; - % adjust channel per each RB + % adjust channel per each RB for iPrb = 1:1:numRBs bfw_per_sym = [ bfw_per_sym, [real((W_ul(:, ant).'))*iPrb; imag((W_ul(:, ant).'))*iPrb]]; end bfw_all_slots = []; - %reuse channel for all symbols + %reuse channel for all symbols for (slot_idx=1:1:nSlots*14) bfw_all_slots = [bfw_all_slots, bfw_per_sym]; end bfw_all_slots_int = int16(bfw_all_slots./max(max(abs((bfw_all_slots.')))).*2^15); - %write files for IQ samples + %write files for IQ samples antX_16=bfw_all_slots_int.'; file_name = strcat(path_to_usecase,"ul_bfw_ue_", num2str(ant-1),".bin"); - disp(file_name) + %disp(file_name) fileID = fopen(file_name,'w'); fwrite(fileID,antX_16, 'int16'); - fclose(fileID); - end + fclose(fileID); + end end end @@ -306,39 +358,39 @@ constellation_all = [628, 1885, 3141, 4398, 5654, 6911, 8167, 9424, -9424, -8167 4096, -4096, 4096, -4096, 4096, -4096, 4096, -4096, 4096, -4096, 4096, -4096, 4096, -4096, 4096, -4096; ]; -numRBs = 273 -nSlots = 20 +numRBs = 273; +nSlots = 20; path_all = ... [ "./usecase/cat_a/mu1_100mhz/"; "./usecase/cat_b/mu1_100mhz/"; "./usecase/cat_b/mu1_100mhz/"; "./usecase/cat_b/mu1_100mhz/"; - ] -path_all = cellstr(path_all) + ]; +path_all = cellstr(path_all); modtype_all = ... [ "256qam_ant_"; "64qam_ant_"; "16qam_ant_"; "qpsk_ant_"; - ] -modtype_all = cellstr(modtype_all) + ]; +modtype_all = cellstr(modtype_all); for test_num = 1:4 - path = path_all(test_num); + path = cell2mat(path_all(test_num)); constellation=constellation_all(test_num,:); - modtype = modtype_all(test_num); + modtype = cell2mat(modtype_all(test_num)); for ant = 1:4 ant_in = rand(2*12*numRBs*14*nSlots,1); % random constellation ant_in = 1+round(15 * ant_in); ant_out = constellation(ant_in); file_name = strcat(path,modtype, num2str(ant-1),".bin"); - disp(file_name) + %disp(file_name) fileID = fopen(file_name,'w'); fwrite(fileID, ant_out, 'int16'); fclose(fileID); end end - +end diff --git a/fhi_lib/app/pcie_addresses.sh b/fhi_lib/app/pcie_addresses.sh new file mode 100755 index 0000000..5ba2b79 --- /dev/null +++ b/fhi_lib/app/pcie_addresses.sh @@ -0,0 +1,119 @@ +#! /bin/bash + +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +get_pcie_addresses_du() +{ + #$1 is hostname + echo "O-DU hostname is $1" + if [ $1 == "icelake-scs1-1" ] + then + pcie_addr1="0000:51:01.0,0000:51:09.0" + pcie_addr2="0000:51:11.0,0000:51:19.0" + pcie_addr3="0000:54:01.0,0000:54:11.0" + pcie_addr4="0000:54:01.1,0000:54:11.1" + + elif [ $1 == "spr-npg-quanta-b4" ] + then + pcie_addr1="0000:43:01.0,0000:43:09.0" + pcie_addr2="0000:43:11.0,0000:43:19.0" + pcie_addr3="0000:45:01.0,0000:45:11.0" + pcie_addr4="0000:45:01.1,0000:45:11.1" + + elif [ $1 == "skx-5gnr-sd6" ] + then + pcie_addr1="0000:af:01.0,0000:af:09.0" + pcie_addr2="0000:af:11.0,0000:af:19.0" + pcie_addr3="0000:af:11.1,0000:af:19.1" + pcie_addr4="0000:af:01.1,0000:af:09.1" + + elif [ $1 == "npg-cp-srv02" ] + then + pcie_addr1="0000:31:01.0,0000:31:09.0" + pcie_addr2="0000:31:11.0,0000:31:19.0" + pcie_addr3="0000:31:11.1,0000:31:19.1" + pcie_addr4="0000:31:01.1,0000:31:09.1" + + elif [ $1 == "npg-cp-srv01" ] + then + pcie_addr1="0000:4b:01.0,0000:4b:09.0" + pcie_addr2="0000:4b:11.0,0000:4b:19.0" + pcie_addr3="0000:4b:11.1,0000:4b:19.1" + pcie_addr4="0000:4b:01.1,0000:4b:09.1" + + elif [ $1 == "npg-cp-srv15" ] + then + pcie_addr1="0000:4b:01.0,0000:4b:09.0" + pcie_addr2="0000:4b:11.0,0000:4b:19.0" + pcie_addr3="0000:4b:11.1,0000:4b:19.1" + pcie_addr4="0000:4b:01.1,0000:4b:09.1" + + else + echo "## ERROR!! Unknown O-DU hostname $1" + echo "## Kindly add the VF PCIe address for this host in ${XRAN_DIR}/app/pcie_addresses.sh ##" + exit 1 + fi +} + +get_pcie_addresses_ru() +{ + #$1 is hostname + echo "O-RU hostname is $1" + if [ $1 == "icx-nclg-scs1-14" ] #RU connected to icelake-scs1-1 + then + #TBD + pcie_addr1="0000:8a:01.0,0000:8a:09.0" + pcie_addr2="0000:8a:11.0,0000:8a:19.0" + pcie_addr3="0000:51:01.0,0000:51:09.0" + pcie_addr4="0000:51:01.1,0000:51:09.1" + + elif [ $1 == "icx-npg-bds1-coyote28" ] #RU spr-npg-quanta-b4 + then + pcie_addr1="0000:8a:01.0,0000:8a:09.0" + pcie_addr2="0000:8a:11.0,0000:8a:19.0" + pcie_addr3="0000:51:11.0,0000:51:19.0" + pcie_addr4="0000:51:11.1,0000:51:19.1" + + elif [ $1 == "skx-5gnr-sd6" ] #RU connected to skx-5gnr-sd6 + then + pcie_addr1="0000:18:01.0,0000:18:09.0" + pcie_addr2="0000:18:11.0,0000:18:19.0" + pcie_addr3="0000:18:11.1,0000:18:19.1" + pcie_addr4="0000:18:01.1,0000:18:09.1" + + elif [ $1 == "npg-cp-srv02" ] || [ $1 == "npg-cp-srv01" ] #RU connected to npg-cp-srv01 and npg-cp-srv-2 respectively (Loop back mode) + then + pcie_addr1="0000:b1:01.0,0000:b1:09.0" + pcie_addr2="0000:b1:11.0,0000:b1:19.0" + pcie_addr3="0000:b1:11.1,0000:b1:19.1" + pcie_addr4="0000:b1:01.1,0000:b1:09.1" + +elif [ $1 == "npg-cp-srv15" ] #RU connected to npg-cp-srv15(Loop back mode) + then + pcie_addr1="0000:ca:01.0,0000:ca:09.0" + pcie_addr2="0000:ca:11.0,0000:ca:19.0" + pcie_addr3="0000:ca:11.1,0000:ca:19.1" + pcie_addr4="0000:ca:01.1,0000:ca:09.1" + + else + echo "## ERROR!! Unknown O-RU hostname $1" + echo "## Kindly add the VF PCIe address for this host in ${XRAN_DIR}/app/pcie_addresses.sh ##" + exit 1 + fi +} diff --git a/fhi_lib/app/run_o_du.sh b/fhi_lib/app/run_o_du.sh index 9743711..d72da00 100755 --- a/fhi_lib/app/run_o_du.sh +++ b/fhi_lib/app/run_o_du.sh @@ -21,8 +21,11 @@ ulimit -c unlimited echo 1 > /proc/sys/kernel/core_uses_pid +source ${XRAN_DIR}/app/pcie_addresses.sh +get_pcie_addresses_du $(hostname) + ./build/sample-app --usecasefile ./usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg --num_eth_vfs 8 \ ---vf_addr_o_xu_a "0000:51:01.0,0000:51:09.0" \ ---vf_addr_o_xu_b "0000:51:11.0,0000:51:19.0" \ ---vf_addr_o_xu_c "0000:18:01.0,0000:18:09.0" \ ---vf_addr_o_xu_d "0000:18:01.1,0000:18:09.1" +--vf_addr_o_xu_a $pcie_addr1 \ +--vf_addr_o_xu_b $pcie_addr2 \ +--vf_addr_o_xu_c $pcie_addr3 \ +--vf_addr_o_xu_d $pcie_addr4 diff --git a/fhi_lib/app/run_o_ru.sh b/fhi_lib/app/run_o_ru.sh index 513840d..192ef6e 100755 --- a/fhi_lib/app/run_o_ru.sh +++ b/fhi_lib/app/run_o_ru.sh @@ -21,8 +21,11 @@ ulimit -c unlimited echo 1 > /proc/sys/kernel/core_uses_pid -./build/sample-app --usecasefile ./usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg --num_eth_vfs 8 \ ---vf_addr_o_xu_a "0000:17:01.0,0000:17:09.0" \ ---vf_addr_o_xu_b "0000:17:11.0,0000:17:19.0" \ ---vf_addr_o_xu_c "0000:65:01.0,0000:65:09.0" \ ---vf_addr_o_xu_d "0000:65:01.1,0000:65:09.1" +source ${XRAN_DIR}/app/pcie_addresses.sh +get_pcie_addresses_ru $(hostname) + +./build-oru/sample-app-ru --usecasefile ./usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg --num_eth_vfs 8 \ +--vf_addr_o_xu_a $pcie_addr1 \ +--vf_addr_o_xu_b $pcie_addr2 \ +--vf_addr_o_xu_c $pcie_addr3 \ +--vf_addr_o_xu_d $pcie_addr4 diff --git a/fhi_lib/app/src/app_bbu_main.c b/fhi_lib/app/src/app_bbu_main.c index 93d2897..a47a8b5 100644 --- a/fhi_lib/app/src/app_bbu_main.c +++ b/fhi_lib/app/src/app_bbu_main.c @@ -33,11 +33,14 @@ #include #include #include +#include #include "app_bbu_pool.h" #include "app_io_fh_xran.h" #include "xran_mlog_task_id.h" +#include +#include /** * @file app_bbu_main.c @@ -94,11 +97,29 @@ int32_t exGenAllFunc[EX_FUNC_NUM] = UL_PUSCH_TB }; +#define EX_FUNC_NUM_RU 1 +int32_t exGenDlFuncRU[EX_FUNC_NUM_RU] = +{}; +int32_t exGenUlFuncRU[EX_FUNC_NUM_RU] = +{ + UL_TX +}; +int32_t exGenAllFuncRU[EX_FUNC_NUM_RU] = +{ + UL_TX +}; + peBbuPoolCfgVarsStruct pCfg; pthread_t tCtrlThread; eBbuPoolHandler pHandler = NULL; clock_t tStart, tEnd; -uint32_t ttiCell[EBBU_POOL_MAX_TEST_CELL] = {0}; + +/** + * Represents the periodicity for the cell wrt highest configured numerology's TTI. + * eg. cell with numerology 0, will have periodicity of 2 wrt numerology 1 cell. + */ +uint32_t ttiCell[EBBU_POOL_MAX_TEST_CELL] = {0}; + uint64_t ttiCountCell[EBBU_POOL_MAX_TEST_CELL] = {0UL}; uint32_t frameFormatCell[EBBU_POOL_MAX_TEST_CELL] = {0}; uint64_t tTTI = 0; @@ -109,9 +130,23 @@ eBbuPoolHandler app_get_ebbu_pool_handler(void) return pHandler; } - -int32_t -app_bbu_dl_tti_call_back(void * param) +/* If multiple connected ORUs support multiple numerologies - this function could get called multiple + * times for same numerology. We should make sure that the processing is not done more than once + * for a connected ORU. procDoneforSlot is used to ensure this. + */ +// #define MAX_SF_IDX 14000U*8U //Max numerlogy 3 is supported. This value is for numerology 3 +// static bool procDoneforSlot[MAX_SF_IDX][EBBU_POOL_MAX_TEST_CELL] = {false}; //Since the size of sfIdx is 4 bytes +// static int32_t prevTtiIdx[EBBU_POOL_MAX_TEST_CELL] = {-1}; +uint8_t cellNumerology_map[EBBU_POOL_MAX_TEST_CELL] = {0}; +uint8_t highestMu = 0; +/** + * app_bbu_dl_tti_call_back is called for the O-RU with the highest numerology. + * Its sample-app's responsibility to register this callback for O-RU with highest numerology. + * This function supports multi numerology, i.e. different O-RU running on different numerology. + * Same O-RU running multiple numerologies is not supported. + * Internally this function loops for all the cells. Thus processing all the O-RUs. +*/ +int32_t app_bbu_dl_tti_call_back(__attribute__((unused)) void *param, __attribute__((unused)) uint8_t mu) { int32_t ret = 0; uint64_t t1 = MLogTick(); @@ -119,9 +154,9 @@ app_bbu_dl_tti_call_back(void * param) int32_t nCtx[EBBU_POOL_MAX_TEST_CELL] = {0}, iExFunc = 0, eventId = 0; int32_t *exGenFuncDl = NULL, *exGenFuncUl = NULL; int32_t nFuncNumDl = 0, nFuncNumUl = 0; - uint8_t Numerlogy = app_io_xran_fh_config[0].frame_conf.nNumerology; - uint8_t nNrOfSlotInSf = 1<testCoreNum); + for(iCore=0; iCore < pCfg->testCoreNum; iCore ++) + { + iCoreIdx = pCfg->testCoreList[iCore]; + if(iCoreIdx > (number_of_processors - 1) && nNode == 1) + {/* move core allocated to numa 1 back to numa 0 */ + + if(iCoreIdx > (threads_per_socket - threads_per_socket/2)) + { + iCoreIdx = (iCoreIdx - threads_per_socket - threads_per_socket/2); + if(iCoreIdx < number_of_processors) + pCfg->testCoreList[iCore] = iCoreIdx; + else + rte_panic("iCoreIdx[%d] > number_of_processors[%ld]\n", iCoreIdx, number_of_processors); + } + } + printf(" %d", iCoreIdx); + } + printf("\n"); +} + nTestCell = pCfg->testCellNum; for (i = 0; i < p_use_cfg->oXuNum; i++) @@ -214,13 +374,16 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p printf("Test cell %d, test total core num %d, test slots %d\n", nTestCell, nTestCore, gRunCount); // Step 1: create Framework handler - ebbu_pool_create_handler(&pHandler, 1, pCfg->mainThreadCoreId); + ebbu_pool_create_handler(&pHandler, 0, pCfg->mainThreadCoreId); if(NULL == pHandler) { printf("\nFail to init Framework!"); exit(-1); } + //Currently only supoort 1 numa node configuration for sample-app + pHandler->nNumaNode = 1; + // Step 2: create priority queues // Assume 3 queues uint32_t nPrioQueue = pCfg->queueNum; @@ -248,20 +411,52 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p peBbuPoolCfgVarsStruct pCfg = ebbu_pool_cfg_get_ctx(); int32_t iCell = 0; int32_t iCtx = 0; - uint32_t xran_timer = (1000/(1 << p_o_xu_cfg[0]->mu_number)); /* base on O-RU 0 */ + uint8_t iMu; + // TODO_MIXED_CAT + uint32_t xran_timer = (1000/(1 << p_o_xu_cfg[0]->mu_number[0])); /* base on O-RU 0 */ - printf("xran_timer for TTI [%d] us\n", xran_timer); + printf("\nxran_timer for TTI [%d] us\n", xran_timer); // Init base timing as per xran_timer uint64_t tStart = ebbu_pool_tick(); usleep(xran_timer); tTTI = ebbu_pool_tick() - tStart; + // Get max configured numerology + uint8_t port_idx=0; + uint8_t mu_idx; + uint16_t tti_interval_min = 1000; + for(port_idx = 0; port_idx < p_use_cfg->oXuNum; ++port_idx){ + + for(mu_idx=0; mu_idx < p_o_xu_cfg[port_idx]->numMu; ++mu_idx){ + + if(p_o_xu_cfg[port_idx]->mu_number[mu_idx] > highestMu) + highestMu = p_o_xu_cfg[port_idx]->mu_number[mu_idx]; + } + } + + // Calculate minimum tti interval + tti_interval_min = 1000/(1 << highestMu); + // cell specific TTI init // create cell and create consumer thread // set events num per cell for(iCell = 0; iCell < nTestCell; iCell ++) { - ttiCell[iCell] = pCfg->sTestCell[iCell].tti/xran_timer; + uint8_t total_cell=0; + // Init cell-numerology map + // Find out the correct O-RU ID for every cell + for(port_idx=0; port_idx < p_use_cfg->oXuNum; port_idx++){ + total_cell += p_o_xu_cfg[port_idx]->numCC; + + if((iCell+1) <= total_cell){ + //Assume every port is running single numerlogy + cellNumerology_map[iCell] = p_o_xu_cfg[port_idx]->mu_number[0]; + printf("\ncellNumerology_map[%d] %hhu",iCell,cellNumerology_map[iCell]); + break; + } + } + + ttiCell[iCell] = pCfg->sTestCell[iCell].tti/tti_interval_min; printf("\nttiCell[%d] %d", iCell, ttiCell[iCell]); frameFormatCell[iCell] = pCfg->sTestCell[iCell].frameFormat; @@ -270,7 +465,8 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p for(iCtx = 0; iCtx < MAX_TEST_CTX; iCtx ++) { - event_chain_gen(&gEventChain[iCell][iCtx]); + for(iMu=0;iMusTestCell[iCell].eventPerTti)-11)/18; //current event chain has 29 events, 19 of them can be split printf("\nnSplitNumCell[%d] %d", iCell, nSplitNumCell[iCell]); @@ -300,17 +496,17 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p if(iCoreIdx < 64) nMask0 |= 1UL << iCoreIdx; else - nMask1 |= 1UL << iCoreIdx; + nMask1 |= 1UL << (iCoreIdx-64); } //printf("\nnStartMask %016lx\n", nStartMask); nActiveCoreMask[0] = nCoreMask[0] = nMask0; - nActiveCoreMask[0] = nCoreMask[1] = nMask1; - nActiveCoreMask[0] = nCoreMask[2] = 0; - nActiveCoreMask[0] = nCoreMask[3] = 0; + nActiveCoreMask[1] = nCoreMask[1] = nMask1; + nActiveCoreMask[2] = nCoreMask[2] = 0; + nActiveCoreMask[3] = nCoreMask[3] = 0; - ebbu_pool_consumer_set_thread_params(pHandler, 55, SCHED_FIFO, pCfg->sleepFlag); + ebbu_pool_consumer_set_thread_params(pHandler, 55, SCHED_FIFO, pCfg->sleepFlag, 0, 0); ebbu_pool_consumer_set_thread_mask(pHandler, nCoreMask); usleep(100000); @@ -324,7 +520,7 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p gNumDLBufferCtx[iCell] = 3; gNumULCtx[iCell] = 8; gNumULBufferCtx[iCell] = 2; - gMaxSlotNum[iCell] = 10240 * (1 << p_o_xu_cfg[0]->mu_number); + gMaxSlotNum[iCell] = 10240 * (1 << p_o_xu_cfg[0]->mu_number[0]); } return 0; @@ -374,7 +570,7 @@ int32_t app_bbu_close(void) } void -app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { eBbuPoolHandler pHandler = app_get_ebbu_pool_handler(); uint64_t t1 = MLogTick(); @@ -390,13 +586,11 @@ app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status) struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; uint32_t xran_max_antenna_nr = RTE_MAX(pXranConf->neAxc, pXranConf->neAxcUl); - uint32_t ant_id, sym_id, idxElm; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; + uint32_t ant_id, sym_id; + int32_t ipkt; mlog_start = MLogTick(); - nCcIdx = pTag->cellId; - nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][nCcIdx]; + nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][0]; nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ sym = pTag->symbol & 0xFF; /* sym */ ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN-1) % XRAN_N_FE_BUF_LEN; @@ -414,57 +608,72 @@ app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status) MLogAddVariables(mlogVarCnt, mlogVar, mlog_start); } - if(psIoCtrl == NULL) + if(unlikely(psIoCtrl == NULL)) { printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); return; } - if (sym == XRAN_ONE_FOURTHS_CB_SYM) { - // 1/4 of slot - test_func_gen(pHandler, nCellIdx, nSlotIdx, SYM2_WAKE_UP); - } else if (sym == XRAN_HALF_CB_SYM) { - // First Half - test_func_gen(pHandler, nCellIdx, nSlotIdx, SYM6_WAKE_UP); - } else if (sym == XRAN_THREE_FOURTHS_CB_SYM) { - // 2/4 of slot - test_func_gen(pHandler, nCellIdx, nSlotIdx, SYM11_WAKE_UP); - } else if (sym == XRAN_FULL_CB_SYM) { - // Second Half - test_func_gen(pHandler, nCellIdx, nSlotIdx, SYM13_WAKE_UP); - } else { - /* error */ - MLogTask(PID_GNB_SYM_CB, t1, MLogTick()); - - rte_panic("app_io_xran_fh_bbu_rx_callback: sym\n"); - return; - } - - if(sym == XRAN_FULL_CB_SYM) //full slot callback only + for(nCcIdx = pTag->cellId; nCcIdx < (pTag->cellId + pXranConf->nCC); ++nCcIdx) { - for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[ntti][nCcIdx][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL){ - printf("(%d:%d:%d)pRbMap == NULL\n", nCcIdx, ntti, ant_id); - exit(-1); - } - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - pRbElm->nSecDesc[sym_id] = 0; + int32_t cellIdxProc = psXranIoIf->map_cell_id2port[o_xu_id][nCcIdx]; + struct xran_prb_map *pRbMap = NULL; + struct rte_mbuf *mb = NULL; + + + if (sym == XRAN_ONE_FOURTHS_CB_SYM) { + // 1/4 of slot + test_func_gen(pHandler, cellIdxProc, nSlotIdx, SYM2_WAKE_UP, mu); + } else if (sym == XRAN_HALF_CB_SYM) { + // First Half + test_func_gen(pHandler, cellIdxProc, nSlotIdx, SYM6_WAKE_UP, mu); + } else if (sym == XRAN_THREE_FOURTHS_CB_SYM) { + // 2/4 of slot + test_func_gen(pHandler, cellIdxProc, nSlotIdx, SYM11_WAKE_UP, mu); + } else if (sym == XRAN_FULL_CB_SYM) { + // Second Half + test_func_gen(pHandler, cellIdxProc, nSlotIdx, SYM13_WAKE_UP, mu); + } else { + /* error */ + MLogTask(PID_GNB_SYM_CB, t1, MLogTick()); + + rte_panic("app_io_xran_fh_bbu_rx_callback: sym\n"); + return; + } + + if(sym == XRAN_FULL_CB_SYM) //full slot callback only + { + for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[ntti][nCcIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCcIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + for (ipkt = 0; ipkt < pFrontHaulRxPacketCtrl->nRxPkt; ipkt++) + { + mb = pFrontHaulRxPacketCtrl->pCtrl[ipkt]; + if(mb){ + rte_pktmbuf_free(mb); + pFrontHaulRxPacketCtrl->pCtrl[ipkt] = NULL; + pFrontHaulRxPacketCtrl->pData[ipkt] = NULL; + } + } + pFrontHaulRxPacketCtrl->nRxPkt = 0; } } } - } - rte_pause(); + rte_pause(); + } /* for nCCIdx */ - MLogTask(PCID_GNB_FH_RX_DATA_CC0+nCellIdx, mlog_start, MLogTick()); + MLogTask(PCID_FH_RX_DATA_CC0+nCellIdx, mlog_start, MLogTick()); return; } void -app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { eBbuPoolHandler pHandler = app_get_ebbu_pool_handler(); int32_t nCellIdx, nCcIdx; @@ -475,16 +684,20 @@ app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status) uint32_t mlogVar[10]; struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); struct xran_io_shared_ctrl *psIoCtrl = app_io_xran_if_ctrl_get(o_xu_id); + struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; uint32_t mlogVarCnt = 0; + uint32_t ant_id, sym_id; + uint32_t xran_max_antenna_nr_prach; + int32_t ipkt; - if(psIoCtrl == NULL || psXranIoIf == NULL) + if(unlikely(psIoCtrl == NULL) || unlikely(psXranIoIf == NULL)) { printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); return; } + xran_max_antenna_nr_prach = RTE_MIN(pXranConf->neAxcUl, XRAN_MAX_PRACH_ANT_NUM); - nCcIdx = pTag->cellId; - nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][nCcIdx]; + nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][0]; nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ sym = pTag->symbol & 0xFF; /* sym */ ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN-1) % XRAN_N_FE_BUF_LEN; @@ -496,13 +709,41 @@ app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status) mlogVar[mlogVarCnt++] = nSlotIdx; mlogVar[mlogVarCnt++] = ntti; MLogAddVariables(mlogVarCnt, mlogVar, MLogTick()); - test_func_gen(pHandler, nCellIdx, nSlotIdx, PRACH_WAKE_UP); - MLogTask(PCID_GNB_FH_RX_PRACH_CC0+nCellIdx, mlog_start, MLogTick()); + for(nCcIdx = pTag->cellId; nCcIdx < (pTag->cellId + pXranConf->nCC); ++nCcIdx) + { + int32_t cellIdxProc = psXranIoIf->map_cell_id2port[o_xu_id][nCcIdx]; + struct xran_prb_map *pRbMap = NULL; + struct rte_mbuf *mb = NULL; + test_func_gen(pHandler, cellIdxProc, nSlotIdx, PRACH_WAKE_UP, mu); + for(ant_id = 0; ant_id < xran_max_antenna_nr_prach; ant_id++) + { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[ntti][nCcIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCcIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + for (ipkt = 0; ipkt < pFrontHaulRxPacketCtrl->nRxPkt; ipkt++) + { + mb = pFrontHaulRxPacketCtrl->pCtrl[ipkt]; + if(mb){ + rte_pktmbuf_free(mb); + pFrontHaulRxPacketCtrl->pCtrl[ipkt] = NULL; + pFrontHaulRxPacketCtrl->pData[ipkt] = NULL; + } + } + pFrontHaulRxPacketCtrl->nRxPkt = 0; + } + } + } + + MLogTask(PCID_FH_RX_PRACH_CC0+nCellIdx, mlog_start, MLogTick()); } void -app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { eBbuPoolHandler pHandler = app_get_ebbu_pool_handler(); int32_t nCellIdx; @@ -515,20 +756,20 @@ app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status) struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; uint32_t xran_max_antenna_nr = RTE_MAX(pXranConf->neAxc, pXranConf->neAxcUl); uint32_t xran_max_ant_array_elm_nr = RTE_MAX(pXranConf->nAntElmTRx, xran_max_antenna_nr); - uint32_t ant_id, sym_id, idxElm; + uint32_t ant_id, sym_id; struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; uint64_t mlog_start = MLogTick(); uint32_t mlogVar[10]; uint32_t mlogVarCnt = 0; + int32_t ipkt; + struct rte_mbuf *mb = NULL; - if(psIoCtrl == NULL || psXranIoIf == NULL) + if(unlikely(psIoCtrl == NULL) || unlikely(psXranIoIf == NULL)) { printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); return; } - nCcIdx = pTag->cellId; - nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][nCcIdx]; + nCellIdx = psXranIoIf->map_cell_id2port[o_xu_id][0]; nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ sym = pTag->symbol & 0xFF; /* sym */ ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN-1) % XRAN_N_FE_BUF_LEN; @@ -540,23 +781,34 @@ app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status) mlogVar[mlogVarCnt++] = nSlotIdx; mlogVar[mlogVarCnt++] = ntti; MLogAddVariables(mlogVarCnt, mlogVar, MLogTick()); - test_func_gen(pHandler, nCellIdx, nSlotIdx, SRS_WAKE_UP); - - if(sym == XRAN_FULL_CB_SYM) //full slot callback only + test_func_gen(pHandler, nCellIdx, nSlotIdx, SRS_WAKE_UP, mu); + + for(nCcIdx = pTag->cellId; nCcIdx < (pTag->cellId + pXranConf->nCC); ++nCcIdx) { - for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[ntti][nCcIdx][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL){ - printf("(%d:%d:%d)pRbMap == NULL\n", nCcIdx, ntti, ant_id); - exit(-1); - } - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - pRbElm->nSecDesc[sym_id] = 0; + if(sym == XRAN_FULL_CB_SYM) //full slot callback only + { + for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[ntti][nCcIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCcIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + for (ipkt = 0; ipkt < pFrontHaulRxPacketCtrl->nRxPkt; ipkt++) + { + mb = pFrontHaulRxPacketCtrl->pCtrl[ipkt]; + if(mb){ + rte_pktmbuf_free(mb); + pFrontHaulRxPacketCtrl->pCtrl[ipkt] = NULL; + pFrontHaulRxPacketCtrl->pData[ipkt] = NULL; + } + } + pFrontHaulRxPacketCtrl->nRxPkt = 0; } } } } - MLogTask(PCID_GNB_FH_RX_SRS_CC0+nCellIdx, mlog_start, MLogTick()); + MLogTask(PCID_FH_RX_SRS_CC0+nCellIdx, mlog_start, MLogTick()); } + diff --git a/fhi_lib/app/src/app_bbu_pool.c b/fhi_lib/app/src/app_bbu_pool.c index fd897c0..be1c455 100644 --- a/fhi_lib/app/src/app_bbu_pool.c +++ b/fhi_lib/app/src/app_bbu_pool.c @@ -41,6 +41,30 @@ extern int32_t gQueueCtxNum; extern int32_t nSplitNumCell[EBBU_POOL_MAX_TEST_CELL]; +extern int32_t app_stop(void); + +#ifdef POLL_EBBU_OFFLOAD +#include "xran_printf.h" +#include "xran_common.h" +#include "xran_timer.h" + +#define NSEC_PER_SEC 1000000000L +#define NSEC_PER_USEC 1000L +#define THRESHOLD 35 +#define SEC_MOD_STOP 60 + +extern enum xran_if_state xran_if_current_state; +extern uint64_t ticks_per_usec; +extern long fine_tuning[5][2]; +extern uint8_t slots_per_subframe[5]; + +/* this static variable is used to record the current status of symbol pollling function */ +static bool firstCall = false; +/* this static variable is used to count the accumulated time lenght */ +static long sym_time_acc = 0; +/* this static variable is used to count the total symbol number */ +static long sym_number_acc = 0; +#endif int32_t test_func_A(void *pCookies); int32_t test_func_B(void *pCookies); @@ -49,7 +73,7 @@ int32_t test_func_C(void *pCookies); void test_pre_func_A(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); void test_pre_func_B(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); -int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId); +int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId, uint8_t mu); int32_t simulate_traffic(void *pCookies, int32_t testCount); @@ -90,6 +114,13 @@ EventConfigStruct testEventTable[MAX_TASK_NUM_G_NB] = { SYM13_WAKE_UP, EVENT_NAME(SYM13_WAKE_UP), CAT_B, app_bbu_pool_task_sym13_wakeup, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, { PRACH_WAKE_UP, EVENT_NAME(PRACH_WAKE_UP), CAT_B, app_bbu_pool_task_prach_wakeup, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, { SRS_WAKE_UP, EVENT_NAME(SRS_WAKE_UP), CAT_B, app_bbu_pool_task_srs_wakeup, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, +#ifdef POLL_EBBU_OFFLOAD + { SYM_POLL, EVENT_NAME(SYM_POLL), CAT_B, app_bbu_pool_task_sym_poll, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, + { PKT_POLL, EVENT_NAME(PKT_POLL), CAT_B, app_bbu_pool_task_pkt_proc_poll, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, + { DL_CP_POLL, EVENT_NAME(DL_CP_POLL), CAT_B, app_bbu_pool_task_dl_cp_poll, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, + { UL_CP_POLL, EVENT_NAME(UL_CP_POLL), CAT_B, app_bbu_pool_task_ul_cp_poll, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, + { TTI_POLL, EVENT_NAME(TTI_POLL), CAT_B, app_bbu_pool_task_tti_poll, NULL, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, +#endif { DL_CONFIG, EVENT_NAME(DL_CONFIG), CAT_B, app_bbu_pool_task_dl_config,app_bbu_pool_pre_task_dl_cfg, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, { DL_PDSCH_TB, EVENT_NAME(DL_PDSCH_TB), CAT_B, test_func_A, test_pre_func_B, 0, 0, 0, 0x000000ffffffffff, 0xfffffffffffffff}, { DL_PDSCH_SCRM, EVENT_NAME(DL_PDSCH_SCRM), CAT_C, test_func_A, NULL, 0, 0, 0, 0x000000ffffffffff, 0xfffffffffffffff}, @@ -119,6 +150,7 @@ EventConfigStruct testEventTable[MAX_TASK_NUM_G_NB] = { DL_BEAM_TX, EVENT_NAME(DL_BEAM_TX), CAT_D, test_func_A, test_pre_func_B, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, { UL_BEAM_GEN, EVENT_NAME(UL_BEAM_GEN), CAT_D, test_func_B, test_pre_func_B, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, { UL_BEAM_TX, EVENT_NAME(UL_BEAM_TX), CAT_D, test_func_A, test_pre_func_B, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, + { UL_TX, EVENT_NAME(UL_TX), CAT_D, app_bbu_pool_task_ul_tx, app_bbu_pool_pre_task_ul_tx, 0, 0, 0, 0x00ffffffffffffff, 0xfffffffffffffff}, }; int32_t gNBNextTaskMap[MAX_TASK_NUM_G_NB][MAX_NEXT_TASK_NUM] = @@ -144,6 +176,23 @@ int32_t gNBNextTaskMap[MAX_TASK_NUM_G_NB][MAX_NEXT_TASK_NUM] = // SRS_WAKE_UP {-1, -1, -1, -1, -1, -1, -1, -1}, +#ifdef POLL_EBBU_OFFLOAD + // SYM_POLL + {-1, -1, -1, -1, -1, -1, -1, -1}, + + // PKT_POLL + {-1, -1, -1, -1, -1, -1, -1, -1}, + + // DL_CP_POLL + {-1, -1, -1, -1, -1, -1, -1, -1}, + + // UL_CP_POLL + {-1, -1, -1, -1, -1, -1, -1, -1}, + + // TTI_POLL + {-1, -1, -1, -1, -1, -1, -1, -1}, + +#endif // DL_CONFIG {DL_PDSCH_TB, DL_CTRL, DL_PDSCH_RS, DL_BEAM_GEN, -1, -1, -1, -1}, @@ -230,11 +279,14 @@ int32_t gNBNextTaskMap[MAX_TASK_NUM_G_NB][MAX_NEXT_TASK_NUM] = // UL_BEAM_TX {UL_POST, -1, -1, -1, -1, -1, -1, -1}, + + // UL_TX + {-1, -1, -1, -1, -1, -1, -1, -1}, }; -__attribute__((aligned(IA_ALIGN))) EventCtrlStruct gEventCtrl[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TASK_NUM_G_NB][MAX_TEST_SPLIT_NUM]; +__attribute__((aligned(IA_ALIGN))) EventCtrlStruct gEventCtrl[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TASK_NUM_G_NB][XRAN_MAX_NUM_MU][MAX_TEST_SPLIT_NUM]; static __attribute__((aligned(IA_ALIGN))) EventStruct gEvent[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TASK_NUM_G_NB][MAX_TEST_SPLIT_NUM]; -__attribute__((aligned(IA_ALIGN))) EventChainDescStruct gEventChain[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX]; +__attribute__((aligned(IA_ALIGN))) EventChainDescStruct gEventChain[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][XRAN_MAX_NUM_MU]; static SampleSplitStruct gsSampleSplit[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TEST_SPLIT_NUM]; static uint64_t dl_start_mlog[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX]; @@ -243,12 +295,19 @@ extern volatile uint64_t ttistart; extern int32_t dl_ul_count, dl_count, ul_count; int32_t test_buffer_create() { - int32_t iCell, iCtx, iTask, iSplit; - for(iCell = 0; iCell < EBBU_POOL_MAX_TEST_CELL; iCell ++) - for(iCtx = 0; iCtx < MAX_TEST_CTX; iCtx ++) - for(iTask = 0; iTask < MAX_TASK_NUM_G_NB; iTask ++) - for(iSplit = 0; iSplit < MAX_TEST_SPLIT_NUM; iSplit ++) - gEventCtrl[iCell][iCtx][iTask][iSplit].dummy0 = (float *)_mm_malloc(sizeof(float), IA_ALIGN); + int32_t iCell, iCtx, iTask, iSplit, iMu; + for(iCell = 0; iCell < EBBU_POOL_MAX_TEST_CELL; iCell ++){ + for(iCtx = 0; iCtx < MAX_TEST_CTX; iCtx ++){ + for(iTask = 0; iTask < MAX_TASK_NUM_G_NB; iTask ++){ + for(iMu=0;iMunSlotIdx; int32_t nCtx = nSlot % MAX_TEST_CTX; int32_t eventId = pEvenCtrl->nEventId; - EventChainDescStruct * pEventChain = &gEventChain[nCell][nCtx]; + uint8_t mu = pEvenCtrl->mu; + EventChainDescStruct * pEventChain = &gEventChain[nCell][nCtx][mu]; + if(eventId == DL_POST||eventId == UL_POST) ebbu_pool_queue_ctx_add(pHandler, nCtx); @@ -402,14 +463,14 @@ int32_t next_event_unlock(void *pCookies) if(__atomic_add_fetch(&pEventChain->preEventStat[nextEventId], 1, __ATOMIC_ACQ_REL) == __atomic_load_n(&pEventChain->preEventCount[nextEventId], __ATOMIC_ACQUIRE)) { - test_func_gen(pHandler, nCell, nSlot, nextEventId); + test_func_gen(pHandler, nCell, nSlot, nextEventId, mu); } } return 0; } -int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId) +int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId, uint8_t mu) { int j; if(eventId >= MAX_TASK_NUM_G_NB || nCell >= EBBU_POOL_MAX_TEST_CELL) @@ -420,7 +481,7 @@ int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, in int32_t nCtx = nSlot % MAX_TEST_CTX; int32_t iNext, iNextEventId, nSplitIdx; - EventChainDescStruct * pEventChain = &gEventChain[nCell][nCtx]; + EventChainDescStruct * pEventChain = &gEventChain[nCell][nCtx][mu]; EventSendStruct sEventSend; EventCtrlStruct *pEventCtrl; TaskPreGen sPara; @@ -454,23 +515,29 @@ int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, in } } + //Currently only supoort 1 numa node configuration for sample-app + sEventSend.nNodeIdx = 0; + //send the splitted events together, save ebbupool internal overhead for(nSplitIdx = 0; nSplitIdx < nSplit; nSplitIdx++) { - pEventCtrl = &gEventCtrl[nCell][nCtx][eventId][nSplitIdx]; + pEventCtrl = &gEventCtrl[nCell][nCtx][eventId][mu][nSplitIdx]; pEventCtrl->nEventId = eventId; pEventCtrl->nSplitIdx = nSplitIdx; pEventCtrl->nCellIdx = nCell; pEventCtrl->nSlotIdx = nSlot; pEventCtrl->pTaskPara = sPara.pTaskExePara[nSplitIdx]; pEventCtrl->pHandler = pHandler; + pEventCtrl->mu = mu; } - set_split_event_info(&gEventCtrl[nCell][nCtx][eventId][0], eventId, nSplit, &sEventSend); - ret = ebbu_pool_send_event(pHandler, sEventSend); + set_split_event_info(&gEventCtrl[nCell][nCtx][eventId][mu][0], eventId, nSplit, &sEventSend); + ret = ebbu_pool_send_event(pHandler, &sEventSend); - if(0 != ret) + if(0 != ret){ + app_stop(); printf("\nEvent %d gen failed!",eventId); + } MLogTask(MAX_TASK_NUM_G_NB * nCell + eventId + 2000, t1, MLogTick()); @@ -510,17 +577,15 @@ void test_pre_func_B(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara) } return; - pPara->nTaskNum = nSplitNumCell[nCellIdx]; + //pPara->nTaskNum = nSplitNumCell[nCellIdx]; //MLogTask(MAX_TASK_NUM_G_NB * pInputPara->nCellIdx + pEvenCtrl->nEventId, t1, MLogTick()); } - int32_t test_func_A(void *pCookies) { EventCtrlStruct *pEvenCtrl = (EventCtrlStruct *)pCookies; uint64_t t1 = MLogTick(); -#if 0 //printf("\nfunc A event %d",pEvenCtrl->nEventId); if(DL_CONFIG == pEvenCtrl->nEventId) { @@ -533,7 +598,6 @@ int32_t test_func_A(void *pCookies) app_bbu_pool_task_ul_config(pCookies); MLogTask(pEvenCtrl->nCellIdx + 5000, pEvenCtrl->tSendTime, t1); } -#endif // int32_t ret = 0; //do some traffic @@ -623,3 +687,361 @@ int32_t simulate_traffic(void *pCookies, int32_t testCount) return 0; } #endif + +#ifdef POLL_EBBU_OFFLOAD +uint32_t app_pool_polling_event_info_set(EventCtrlStruct *pEventCtrl, int32_t nSplit, EventSendStruct *psEventSend, uint32_t nDelay) +{ + int32_t nTaskId = pEventCtrl[0].nEventId; + int32_t nCellIdx = pEventCtrl[0].nCellIdx; + int32_t nSlotIdx = pEventCtrl[0].nSlotIdx; + int32_t nCtx = nSlotIdx % gQueueCtxNum; + int32_t nQueueIdx = nSlotIdx; + int32_t iSplit = 0; + int32_t nPrio = testEventTable[nTaskId].nEventPrio; + + for(; iSplit < nSplit; iSplit++) + { + EventStruct *pEvent = &gEvent[nCellIdx][nCtx][nTaskId][iSplit]; + pEvent->pEventFunc = testEventTable[nTaskId].pEventFunc; + pEvent->pEventArgs = &pEventCtrl[iSplit]; + pEvent->nEventId = nTaskId; + pEvent->nEventSentTime = ebbu_pool_tick(); + pEvent->nEventSentTimeMlog = MLogTick(); + pEvent->nEventExpectedTime = pEvent->nEventSentTime + (nDelay*ticks_per_usec); + pEvent->nEventAliveTime = 100000000; + pEvent->nCoreAffinityMask = _mm256_set_epi64x(0,0,testEventTable[nTaskId].nCoreMask1,testEventTable[nTaskId].nCoreMask0); + pEvent->nEventStatus = EBBUPOOL_EVENT_VALID; + psEventSend->psEventStruct[iSplit] = pEvent; + } + psEventSend->eDisposFlag = EBBUPOOL_NON_DISPOSABLE; + + psEventSend->ePrioCat = (EventPrioEnum)eventSendDic[nPrio]; + psEventSend->nQueueCtx = 0; + if(gQueueCtxNum > 1) + { + if ((nPrio > CAT_A) && (nPrio < CAT_D)) + { + psEventSend->nQueueCtx = (nQueueIdx % gQueueCtxNum); + } + } + + psEventSend->nPreFlag = testEventTable[nTaskId].nPrefetchFlag; + psEventSend->nEventNum = nSplit; + + return psEventSend->ePrioCat; +} + +int32_t app_bbu_polling_event_gen(uint32_t nCellIdx, uint32_t nTaskId, uint32_t nDelay, void *pTaskPara) +{ + eBbuPoolHandler pHandler = app_get_ebbu_pool_handler(); + EventSendStruct sEventSend; + TaskPreGen sPara; + + uint32_t nSlotIdx = 0; + uint32_t nSplit = 1; + int32_t nCtx = 0; + uint8_t mu = 0; + + + EventCtrlStruct *pEventCtrl; + uint32_t nSplitIdx; + + int32_t ret; + + if (nTaskId >= MAX_TASK_NUM_G_NB) + { + printf("app_bbu_polling_event_gen ERROR: nTaskId(%d) >= MAX_TASK_NUM_G_NB[%d]\n", nTaskId, MAX_TASK_NUM_G_NB); + return FAILURE; + } + + // Klocwork check + for (nSplitIdx = 0; nSplitIdx < MAX_TEST_SPLIT_NUM; nSplitIdx++) + sPara.pTaskExePara[nSplitIdx] = (void *)&gsSampleSplit[nCellIdx%EBBU_POOL_MAX_TEST_CELL][nSlotIdx%MAX_TEST_CTX][nSplitIdx]; + + // Klockwork Check + sPara.nTaskNum = 1; + for(nSplitIdx = 0; nSplitIdx < sPara.nTaskNum; nSplitIdx ++) + { + sPara.pTaskExePara[nSplitIdx] = pTaskPara; + } + + if (testEventTable[nTaskId].pPreEventFunc) + { + /* Run Pre Event and Find out how many split */ + sPara.nTaskNum = 1; + testEventTable[nTaskId].pPreEventFunc(nSlotIdx, nCellIdx, &sPara); + nSplit = sPara.nTaskNum; + } + + sEventSend.nNodeIdx = 0; + + for(nSplitIdx = 0; nSplitIdx < sPara.nTaskNum; nSplitIdx++) + { + pEventCtrl = &gEventCtrl[nCellIdx][nCtx][nTaskId][mu][nSplitIdx]; + pEventCtrl->nEventId = nTaskId; + pEventCtrl->nSplitIdx = nSplitIdx; + pEventCtrl->nCellIdx = nCellIdx; + pEventCtrl->nSlotIdx = nSlotIdx; + pEventCtrl->pHandler = pHandler; + pEventCtrl->pTaskPara = sPara.pTaskExePara[nSplitIdx]; + } + + /* Send the splitted events together, save ebbupool internal overhead */ + app_pool_polling_event_info_set(&gEventCtrl[nCellIdx][nCtx][nTaskId][mu][0], nSplit, &sEventSend, nDelay); + + ret = ebbu_pool_send_polling_event(pHandler, &sEventSend); + if (0 != ret) + { + printf("\napp_bbu_polling_event_gen: Event %d gen failed!", nTaskId); + } + + return ret; +} + +int32_t app_bbu_pool_task_sym_poll(void *pCookies) +{ + uint32_t timerMu = xran_timingsource_get_numerology(); + int32_t debugStop = timing_get_debug_stop(); + int32_t debugStopCount = timing_get_debug_stop_count(); + uint64_t started_second = timing_get_start_second(); + PXRAN_TIMER_CTX pCtx = xran_timer_get_ctx_ebbu_offload(); + + struct xran_common_counters *pCnt = xran_fh_counters_ebbu_offload(); + struct timespec* p_cur_time = &pCtx->ebbu_offload_cur_time; + struct timespec* p_last_time = &pCtx->ebbu_offload_last_time; + long last_time = 0, delta = 0; + long interval_ns = xran_timer_get_interval_ebbu_offload(); + long tm_threshold_high = interval_ns * N_SYM_PER_SLOT * 2;//2 slots + long tm_threshold_low = interval_ns * 2; //2 symbols + long tm_threshold_sym_up_window = interval_ns * pCtx->sym_up_window; //U-Plane TX window symbols + int32_t i,j,nDelay = 5; + uint64_t t1, t2; + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + if(firstCall == false) + { + clock_gettime(CLOCK_REALTIME, p_last_time); + pCtx->current_second = p_last_time->tv_sec; + firstCall = true; + } + + last_time = (p_last_time->tv_sec * NSEC_PER_SEC + p_last_time->tv_nsec); + clock_gettime(CLOCK_REALTIME, p_cur_time); + + timing_adjust_gps_second_ebbu_offload(p_cur_time); + + delta = (p_cur_time->tv_sec * NSEC_PER_SEC + p_cur_time->tv_nsec) - last_time; + + //add tm exception handling + if(unlikely(labs(delta) > tm_threshold_low) && pCtx->first_call) + { + print_dbg("poll_next_tick exceed 2 symbols threshold with delta:%ld(ns), used_tick:%ld(tick) \n", + delta, pCtx->used_tick); + pCnt->timer_missed_sym++; + + if(unlikely(labs(delta) > tm_threshold_sym_up_window)) + { + print_dbg("poll_next_tick exceed UP TX window! delta:%ld(ns), sym_up_window is %ld, used_tick:%ld(tick) \n", + delta, tm_threshold_sym_up_window, pCtx->used_tick); + pCnt->timer_missed_sym_window++; + } + + if(unlikely(labs(delta) > tm_threshold_high)) + { + print_dbg("poll_next_tick exceed 2 slots threshold, stop xran! delta:%ld(ns), used_tick:%ld(tick) \n", + delta, pCtx->used_tick); + printf("poll_next_tick exceed 2 slots threshold! delta:%ld(ns), used_tick:%ld(tick) \n", + delta, pCtx->used_tick); + pCnt->timer_missed_slot++; + } + } + + if(delta > (interval_ns - THRESHOLD)) + { + pCtx->used_tick = 0; + if (debugStop &&(debugStopCount > 0) && (pCnt->tx_counter >= debugStopCount)) + { + printf("STOP:[%ld.%09ld], debugStopCount %d, tx_counter %ld\n", + p_cur_time->tv_sec, p_cur_time->tv_nsec, debugStopCount, pCnt->tx_counter); + xran_if_current_state = XRAN_STOPPED; + } + + while(delta > (interval_ns - THRESHOLD)) + { + if(pCtx->current_second != p_cur_time->tv_sec) + { + pCtx->current_second = p_cur_time->tv_sec; + + xran_updateSfnSecStart(); + + for (i=0; i < XRAN_MAX_NUM_MU; i++) + { + pCtx->ebbu_offload_ota_sym_cnt_mu[i] = 0; + pCtx->ebbu_offload_ota_sym_idx_mu[i] = 0; + for(j=0;jebbu_offload_ota_tti_cnt_mu[j][i] = 0; + } + } + sym_number_acc = sym_time_acc = 0; + print_dbg("ToS:C Sync timestamp: [%ld.%09ld]\n", p_cur_time->tv_sec, p_cur_time->tv_nsec); + + if(debugStop) + { + if(p_cur_time->tv_sec > started_second && ((p_cur_time->tv_sec % SEC_MOD_STOP) == 0)) + { + uint32_t tti = pCtx->ebbu_offload_ota_tti_cnt_mu[0][timerMu]; + uint32_t slot_id = XranGetSlotNum(tti, SLOTNUM_PER_SUBFRAME(interval_us)); + uint32_t subframe_id = XranGetSubFrameNum(tti,SLOTNUM_PER_SUBFRAME(interval_us), SUBFRAMES_PER_SYSTEMFRAME); + uint32_t frame_id = XranGetFrameNum(tti, pCtx->xran_SFN_at_Sec_Start, + SUBFRAMES_PER_SYSTEMFRAME, SLOTNUM_PER_SUBFRAME(interval_us)); + + printf("STOP:[%ld.%09ld] (%d : %d : %d)\n", + p_cur_time->tv_sec, p_cur_time->tv_nsec,frame_id, subframe_id, slot_id); + + xran_if_current_state = XRAN_STOPPED; + } + } + p_cur_time->tv_nsec = 0; // adjust to 1pps + } /* second changed */ + else + { + pCtx->ebbu_offload_ota_sym_cnt_mu[timerMu] = XranIncrementSymIdx(pCtx->ebbu_offload_ota_sym_cnt_mu[timerMu], + XRAN_NUM_OF_SYMBOL_PER_SLOT*slots_per_subframe[timerMu]); + + /* timerMu is highest configured numerology. Update the rest */ + for (i = timerMu - 1; i >= 0; i--) + { + pCtx->ebbu_offload_ota_sym_cnt_mu[i] = pCtx->ebbu_offload_ota_sym_cnt_mu[timerMu] >> (timerMu - i); + } + + pCtx->ebbu_offload_ota_sym_cnt_mu[XRAN_NBIOT_MU] = pCtx->ebbu_offload_ota_sym_cnt_mu[0]; /*mu kept for NB-IOT*/ + + /* adjust to sym boundary */ + if(sym_number_acc & 1) + sym_time_acc += fine_tuning[timerMu][0]; + else + sym_time_acc += fine_tuning[timerMu][1]; + + /* fine tune to second boundary */ + if(sym_number_acc % 13 == 0) + sym_time_acc += 1; + + p_cur_time->tv_nsec = sym_time_acc; + sym_number_acc++; + } + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + t1 = xran_tick(); + xran_sym_poll_callback_task_ebbu_offload(); + t2 = xran_tick(); + pCtx->used_tick += get_ticks_diff(t2, t1); + + for(i=0;iebbu_offload_ota_sym_cnt_mu[i], XRAN_NUM_OF_SYMBOL_PER_SLOT) == pCtx->ebbu_offload_ota_sym_idx_mu[i]) + { + pCtx->ebbu_offload_ota_sym_idx_mu[i]++; + if(pCtx->ebbu_offload_ota_sym_idx_mu[i] >= N_SYM_PER_SLOT) + { + pCtx->ebbu_offload_ota_sym_idx_mu[i] = 0; + } + } + } + } + delta -= interval_ns; + } + p_last_time->tv_sec = p_cur_time->tv_sec; + p_last_time->tv_nsec = p_cur_time->tv_nsec; + + t1 = xran_tick(); + xran_sym_poll_task_ebbu_offload(); + t2 = xran_tick(); + pCtx->used_tick += get_ticks_diff(t2, t1); + + } + else + { + if(likely((xran_if_current_state == XRAN_RUNNING)||(xran_if_current_state == XRAN_OWDM))) + { + t1 = xran_tick(); + xran_sym_poll_task_ebbu_offload(); + t2 = xran_tick(); + pCtx->used_tick += get_ticks_diff(t2, t1); + } + } + } + + if(XRAN_STOPPED != xran_if_current_state) + { + if(pCtx->ebbu_offload_ota_sym_idx_mu[timerMu] == 0 || ((interval_ns - delta) < (nDelay * 1000))) + nDelay = 0; + app_bbu_polling_event_gen(0, SYM_POLL, nDelay, NULL); // Call symbol polling every 5us + } + else + { + xran_timing_destroy_cbs((void*)xran_dev_get_ctx_ebbu_offload()); + print_dbg("pCnt->timer_missed_sym is %ld, pCnt->timer_missed_sym_window is %ld, pCnt->timer_missed_slot is %ld\n", \ + pCnt->timer_missed_sym, pCnt->timer_missed_sym_window, pCnt->timer_missed_slot); + } + + return EBBUPOOL_CORRECT; +} + +int32_t app_bbu_pool_task_pkt_proc_poll(void *pCookies) +{ + int32_t nDelay = 2; + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + xran_pkt_proc_poll_task_ebbu_offload(); + } + + if(XRAN_STOPPED != xran_if_current_state) + { + app_bbu_polling_event_gen(0, PKT_POLL, nDelay, NULL); // Call symbol polling every 2 us + } + + return EBBUPOOL_CORRECT; +} +int32_t app_bbu_pool_task_dl_cp_poll(void *pCookies) +{ + EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + xran_task_dl_cp_ebbu_offload(pEventCtrl->pTaskPara); + } + + return EBBUPOOL_CORRECT; +} +int32_t app_bbu_pool_task_ul_cp_poll(void *pCookies) +{ + EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + xran_task_ul_cp_ebbu_offload(pEventCtrl->pTaskPara); + } + + return EBBUPOOL_CORRECT; +} +int32_t app_bbu_pool_task_tti_poll(void *pCookies) +{ + EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; + + if(likely(XRAN_RUNNING == xran_if_current_state)) + { + xran_task_tti_ebbu_offload(pEventCtrl->pTaskPara); + } + + return EBBUPOOL_CORRECT; +} +#endif diff --git a/fhi_lib/app/src/app_bbu_pool.h b/fhi_lib/app/src/app_bbu_pool.h index 3852f83..55278a4 100644 --- a/fhi_lib/app/src/app_bbu_pool.h +++ b/fhi_lib/app/src/app_bbu_pool.h @@ -88,7 +88,14 @@ typedef enum SYM13_WAKE_UP, /* 4 Sym13 Arrival which will wake up UL Tasks for all cells */ PRACH_WAKE_UP, /* 5 PRACH Arrival which will wake up will wake up PRACH for all cells */ SRS_WAKE_UP, /* 6 (Massive MIMO) SRS Arrival which will wake up SRS Decompression for all cells */ - DL_CONFIG, /* 7 */ +#ifdef POLL_EBBU_OFFLOAD + SYM_POLL = 7, /* 7 Symbol polling task which will do all symbol-level polling tasks*/ + PKT_POLL, /* 8 RX packet polling processing task which will do RX packet polling processing tasks*/ + DL_CP_POLL, /* 9 DL CP Polling tasks*/ + UL_CP_POLL, /* 10 UL CP Polling tasks*/ + TTI_POLL, /* 11 TTI Polling tasks*/ +#endif + DL_CONFIG, /* 7 if macro POLL_EBBU_OFFLOAD is undefined, otherwise it will be 12. And following number will change accordingly */ DL_PDSCH_TB, /* 8 */ DL_PDSCH_SCRM, /* 9 */ DL_PDSCH_SYM, /* 10 */ @@ -117,7 +124,8 @@ typedef enum DL_BEAM_TX, /* 33 */ UL_BEAM_GEN, /* 34 */ UL_BEAM_TX, /* 35 */ - MAX_TASK_NUM_G_NB /* 36 */ + UL_TX, /* 36 */ + MAX_TASK_NUM_G_NB /* 37 */ } TaskTypeEnum; ///defines the parameters that multi-tasks are generated. @@ -188,6 +196,7 @@ typedef struct typedef struct { + eBbuPoolMsgHeader sMsgHeader; //mush have it at the begining of the event control struct int32_t nEventId; int32_t nSplitIdx; int32_t nCellIdx; @@ -197,6 +206,7 @@ typedef struct float *dummy0; uint64_t tSendTime; uint8_t nBuffer[240]; + uint8_t mu; } __attribute__((aligned(IA_ALIGN))) EventCtrlStruct; typedef struct @@ -215,8 +225,8 @@ typedef struct int16_t *pWeighttp; } __attribute__((aligned(IA_ALIGN))) gNBCellStruct; -extern EventChainDescStruct gEventChain[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX]; -extern EventCtrlStruct gEventCtrl[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TASK_NUM_G_NB][MAX_TEST_SPLIT_NUM]; +extern EventChainDescStruct gEventChain[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][XRAN_MAX_NUM_MU]; +extern EventCtrlStruct gEventCtrl[EBBU_POOL_MAX_TEST_CELL][MAX_TEST_CTX][MAX_TASK_NUM_G_NB][XRAN_MAX_NUM_MU][MAX_TEST_SPLIT_NUM]; int32_t event_chain_gen(EventChainDescStruct *psEventChain); int32_t event_chain_reset(EventChainDescStruct *psEventChain); @@ -229,9 +239,10 @@ int32_t app_bbu_init(int argc, char *argv[], char cfgName[512], UsecaseConfig* p int32_t app_bbu_close(void); -int32_t app_bbu_dl_tti_call_back(void * param); +int32_t app_bbu_dl_tti_call_back(void * param, uint8_t mu); +int32_t app_bbu_ul_tti_call_back(void * param, uint8_t mu); -int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId); +int32_t test_func_gen(eBbuPoolHandler pHandler, int32_t nCell, int32_t nSlot, int32_t eventId, uint8_t mu); int32_t next_event_unlock(void *pCookies); /** tasks */ @@ -239,8 +250,10 @@ int32_t app_bbu_pool_task_dl_post(void *pCookies); void app_bbu_pool_pre_task_dl_post(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); int32_t app_bbu_pool_task_dl_config(void *pCookies); void app_bbu_pool_pre_task_dl_cfg(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); -int32_t app_bbu_pool_task_ul_config(void * pCookies); +int32_t app_bbu_pool_task_ul_config( void * pCookies); void app_bbu_pool_pre_task_ul_cfg(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); +int32_t app_bbu_pool_task_ul_tx(void *pCookies); +void app_bbu_pool_pre_task_ul_tx(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara); int32_t app_bbu_pool_task_sym2_wakeup(void *pCookies); int32_t app_bbu_pool_task_sym6_wakeup(void *pCookies); @@ -249,13 +262,23 @@ int32_t app_bbu_pool_task_sym13_wakeup(void *pCookies); int32_t app_bbu_pool_task_prach_wakeup(void *pCookies); int32_t app_bbu_pool_task_srs_wakeup(void *pCookies); -void app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status); +#ifdef POLL_EBBU_OFFLOAD +int32_t app_bbu_polling_event_gen(uint32_t nCellIdx, uint32_t nTaskId, uint32_t nDelay, void *pTaskPara); +int32_t app_bbu_pool_task_sym_poll(void *pCookies); +int32_t app_bbu_pool_task_pkt_proc_poll(void *pCookies); +int32_t app_bbu_pool_task_dl_cp_poll(void *pCookies); +int32_t app_bbu_pool_task_ul_cp_poll(void *pCookies); +int32_t app_bbu_pool_task_tti_poll(void *pCookies); +#endif + +void app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_csirs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); //Rx callback for RU #ifdef __cplusplus } #endif -#endif /*_APP_BBU_POOL_H_*/ \ No newline at end of file +#endif /*_APP_BBU_POOL_H_*/ diff --git a/fhi_lib/app/src/app_dl_bbu_pool_tasks.c b/fhi_lib/app/src/app_dl_bbu_pool_tasks.c index a43a5c8..ee66d17 100644 --- a/fhi_lib/app/src/app_dl_bbu_pool_tasks.c +++ b/fhi_lib/app/src/app_dl_bbu_pool_tasks.c @@ -240,6 +240,7 @@ app_bbu_pool_task_dl_config(void *pCookies) int32_t nSymbMask = 0b11111111111111; RuntimeConfig *p_o_xu_cfg = NULL; uint16_t nLayerStart = 0, nLayer = 0; + uint8_t mu = pEventCtrl->mu; if(psXranIoIf == NULL) rte_panic("psXranIoIf == NULL"); @@ -251,6 +252,8 @@ app_bbu_pool_task_dl_config(void *pCookies) return EBBUPOOL_CORRECT; } psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + if(psIoCtrl == NULL) + rte_panic("psIoCtrl is null (port%d)", xran_port); pXranConf = &app_io_xran_fh_config[xran_port]; if(pXranConf == NULL) rte_panic("pXranConf"); @@ -270,15 +273,16 @@ app_bbu_pool_task_dl_config(void *pCookies) mlog_start = MLogTick(); - if(LAYER_SPLIT == pTaskPara->eSplitType) { - // iSplit = pTaskPara->nSplitIndex; - nLayerStart = pTaskPara->nLayerStart; - nLayer = pTaskPara->nLayerNum; - //printf("\nsf %d nSymbStart %d nSymb %d iSplit %d", nSfIdx, nSymbStart, nSymb, iSplit); - } else { + if(LAYER_SPLIT != pTaskPara->eSplitType) { rte_panic("LAYER_SPLIT == pTaskPara->eSplitType"); } + + // iSplit = pTaskPara->nSplitIndex; + nLayerStart = pTaskPara->nLayerStart; + nLayer = pTaskPara->nLayerNum; + //printf("\nsf %d nSymbStart %d nSymb %d iSplit %d", nSfIdx, nSymbStart, nSymb, iSplit); + if(p_o_xu_cfg->p_buff) { p_iq = p_o_xu_cfg->p_buff; } else { @@ -298,10 +302,10 @@ app_bbu_pool_task_dl_config(void *pCookies) } for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { if(((1 << sym_id) & nSymbMask)) { - if ((status = app_io_xran_iq_content_init_cp_tx(p_o_xu_cfg->appMode, pXranConf, + if ((status = app_io_xran_iq_content_init_dl_cp(p_o_xu_cfg->appMode, pXranConf, psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_cp_tx"); + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_dl_cp"); } } } @@ -309,21 +313,21 @@ app_bbu_pool_task_dl_config(void *pCookies) } xran_prepare_cp_dl_slot(xran_port, nSfIdx, nRuCcidx, /*psXranIoIf->num_cc_per_port[xran_port]*/ 1, nSymbMask, nLayerStart, - nLayer, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT); + nLayer, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT, mu); if (mlogVariablesCnt) MLogAddVariables((uint32_t)mlogVariablesCnt, (uint32_t *)mlogVariables, mlog_start); //unlock the next task next_event_unlock(pCookies); - MLogTask(PCID_GNB_DL_CFG_CC0+nCellIdx, mlog_start, MLogTick()); + MLogTask(PCID_NR5G_DL_CFG_CC0+nCellIdx, mlog_start, MLogTick()); return EBBUPOOL_CORRECT; } int32_t app_io_xran_dl_pack_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, - uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) + uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum, uint8_t mu) { xran_status_t status; uint32_t nSlotIdx = get_dl_sf_idx(nSfIdx, nCellIdx); @@ -379,7 +383,7 @@ app_io_xran_dl_pack_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, if(((1 << sym_id) & nSymMask)) { if ((status = app_io_xran_iq_content_init_up_tx(p_o_xu_cfg->appMode, pXranConf, psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { rte_panic("app_io_xran_iq_content_init_up_tx"); } } @@ -387,12 +391,31 @@ app_io_xran_dl_pack_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, } } - xran_prepare_up_dl_sym(xran_port, nSlotIdx, nRuCcidx, 1, nSymMask, nAntStart, nAntNum, nSymStart, nSymNum); + /* CSIRS IQ content init */ + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B && p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->csirsEnable && nAntStart == 0) { //required to avoid repeated CSI-RS transmission with different splitgroups + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = 0; ant_id < p_o_xu_cfg->nCsiPorts; ant_id++) { + flowId = p_o_xu_cfg->nCsiPorts*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_init_up_csirs(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_csirs"); + } + } + } + } + } + } + + xran_prepare_up_dl_sym(xran_port, nSlotIdx, nRuCcidx, 1, nSymMask, nAntStart, nAntNum, nSymStart, nSymNum, mu); return SUCCESS; } int32_t -app_io_xran_dl_post_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, uint32_t nAntStart, uint32_t nAntNum) +app_io_xran_dl_post_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, uint32_t nAntStart, + uint32_t nAntNum, uint8_t mu) { uint16_t phyInstance = nCellIdx; // uint32_t Ntx_antennas; @@ -417,9 +440,9 @@ app_io_xran_dl_post_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, // pXranConf = &app_io_xran_fh_config[xran_port]; // Ntx_antennas = pXranConf->neAxc; - app_io_xran_dl_pack_func(nCellIdx, nSfIdx, nSymMask, nAntStart, nAntNum, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT); + app_io_xran_dl_pack_func(nCellIdx, nSfIdx, nSymMask, nAntStart, nAntNum, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT, mu); - MLogTask(PCID_GNB_DL_IQ_COMPRESS_CC0 + phyInstance, tTotal, MLogTick()); + MLogTask(PCID_FH_DL_IQ_COMPRESS_CC0 + phyInstance, tTotal, MLogTick()); return SUCCESS; } @@ -447,6 +470,7 @@ int32_t app_bbu_pool_task_dl_post(void *pCookies) uint32_t mlogVar[10]; uint32_t mlogVarCnt = 0; uint16_t nLayerStart = 0, nLayer = 0; + uint8_t mu = pEventCtrl->mu; mlog_start = MLogTick(); if(LAYER_SPLIT == pTaskPara->eSplitType) { @@ -469,7 +493,7 @@ int32_t app_bbu_pool_task_dl_post(void *pCookies) for(iOfdmSymb = nSymbStart; iOfdmSymb < (nSymbStart + nSymb); iOfdmSymb ++) nSymMask |= (1 << iOfdmSymb); - app_io_xran_dl_post_func(pEventCtrl->nCellIdx, pEventCtrl->nSlotIdx, /*0x3FFF*/ nSymMask, nLayerStart, nLayer); + app_io_xran_dl_post_func(pEventCtrl->nCellIdx, pEventCtrl->nSlotIdx, /*0x3FFF*/ nSymMask, nLayerStart, nLayer, mu); #if 1 { @@ -488,7 +512,7 @@ int32_t app_bbu_pool_task_dl_post(void *pCookies) //unlock the next task next_event_unlock(pCookies); - MLogTask(PCID_GNB_DL_POST_CC0+nCellIdx, mlog_start, MLogTick()); + MLogTask(PCID_NR5G_DL_POST_CC0+nCellIdx, mlog_start, MLogTick()); return EBBUPOOL_CORRECT; } diff --git a/fhi_lib/app/src/app_io_fh_xran.c b/fhi_lib/app/src/app_io_fh_xran.c index 87dc867..b30b63f 100644 --- a/fhi_lib/app/src/app_io_fh_xran.c +++ b/fhi_lib/app/src/app_io_fh_xran.c @@ -39,6 +39,8 @@ #include "xran_sync_api.h" #include "xran_mlog_task_id.h" #include "app_io_fh_xran.h" +#include +#include #ifdef FWK_ENABLED #include "app_bbu_pool.h" #endif @@ -49,72 +51,82 @@ uint32_t nSW_ToFpga_FTH_TxBufferLen; static struct bbu_xran_io_if *p_app_io_xran_if; -void * app_io_xran_handle = NULL; +void * app_io_xran_handle[XRAN_PORTS_NUM]; struct xran_fh_init app_io_xran_fh_init; struct xran_fh_config app_io_xran_fh_config[XRAN_PORTS_NUM]; -void app_io_xran_fh_rx_callback(void *pCallbackTag, int32_t status); -void app_io_xran_fh_rx_prach_callback(void *pCallbackTag, int32_t status); -void app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status); +void app_io_xran_fh_rx_callback(void *pCallbackTag, int32_t status, uint8_t mu); +void app_io_xran_fh_rx_prach_callback(void *pCallbackTag, int32_t status, uint8_t mu); +void app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_rx_csirs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); #ifndef FWK_ENABLED -void app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status); -void app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status); +void app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); +void app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu); #endif extern RuntimeConfig* p_startupConfiguration[XRAN_PORTS_NUM]; -struct bbu_xran_io_if * -app_io_xran_if_alloc(void) +struct bbu_xran_io_if *app_io_xran_if_alloc(void) { void *ptr = 0; ptr = _mm_malloc(sizeof(struct bbu_xran_io_if), 256); - if (ptr == NULL) { + if (ptr == NULL) + { rte_panic("_mm_malloc: Can't allocate %lu bytes\n", sizeof(struct bbu_xran_io_if)); } p_app_io_xran_if = (struct bbu_xran_io_if *)ptr; return p_app_io_xran_if; } -struct bbu_xran_io_if * -app_io_xran_if_get(void) +struct bbu_xran_io_if *app_io_xran_if_get(void) { return p_app_io_xran_if; } -void -app_io_xran_if_free(void) +void app_io_xran_if_free(void) { - if (p_app_io_xran_if == NULL) { + if(xran_mm_destroy(app_io_xran_handle[0]) != XRAN_STATUS_SUCCESS) + { + printf("Failed at xran_mm_destroy!\n"); + } + + if (p_app_io_xran_if == NULL) + { rte_panic("_mm_free: Can't free p_app_io_xran_if\n"); } _mm_free(p_app_io_xran_if); return; } -struct xran_io_shared_ctrl * -app_io_xran_if_ctrl_get(uint32_t o_xu_id) +struct xran_io_shared_ctrl *app_io_xran_if_ctrl_get(uint32_t o_xu_id) { - if(o_xu_id >= 0 && o_xu_id < XRAN_PORTS_NUM) { - return &p_app_io_xran_if->ioCtrl[o_xu_id]; - } else { + if(o_xu_id < XRAN_PORTS_NUM) + { + if(p_app_io_xran_if != NULL) + return &(p_app_io_xran_if->ioCtrl[o_xu_id]); + else + return NULL; + } + else + { return NULL; } } -int32_t -app_io_xran_sfidx_get(uint8_t nNrOfSlotInSf) +int32_t app_io_xran_sfidx_get(uint8_t mu) { int32_t nSfIdx = -1; uint32_t nFrameIdx; uint32_t nSubframeIdx; uint32_t nSlotIdx; uint64_t nSecond; + uint8_t nNrOfSlotInSf = ((mu == XRAN_NBIOT_MU)? 1 : 1 << mu ); /*mu = 5 represents NB-IOT mu = 0*/ - /*uint32_t nXranTime = */xran_get_slot_idx(0, &nFrameIdx, &nSubframeIdx, &nSlotIdx, &nSecond); + /*uint32_t nXranTime = */xran_get_slot_idx(0, &nFrameIdx, &nSubframeIdx, &nSlotIdx, &nSecond, mu); nSfIdx = nFrameIdx*NUM_OF_SUBFRAME_PER_FRAME*nNrOfSlotInSf + nSubframeIdx*nNrOfSlotInSf + nSlotIdx; @@ -131,8 +143,7 @@ app_io_xran_sfidx_get(uint8_t nNrOfSlotInSf) return nSfIdx; } -void -app_io_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status) +void app_io_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { uint64_t t1 = MLogTick(); uint32_t mlogVar[10]; @@ -149,9 +160,7 @@ app_io_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status) struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; uint32_t xran_max_antenna_nr = RTE_MAX(pXranConf->neAxc, pXranConf->neAxcUl); //int32_t nSectorNum = pXranConf->nCC; - uint32_t ant_id, sym_id, idxElm; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; + uint32_t ant_id, sym_id; mlog_start = MLogTick(); @@ -173,7 +182,7 @@ app_io_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status) MLogAddVariables(mlogVarCnt, mlogVar, mlog_start); } - if(psIoCtrl == NULL) + if(unlikely(psIoCtrl == NULL)) { printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); return; @@ -193,47 +202,138 @@ app_io_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status) return; } - if(sym == XRAN_FULL_CB_SYM) //full slot callback only + for(nCellIdx = pTag->cellId; nCellIdx < (pTag->cellId + pXranConf->nCC); ++nCellIdx) { - for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL){ - printf("(%d:%d:%d)pRbMap == NULL\n", nCellIdx, ntti, ant_id); - exit(-1); - } - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - pRbElm->nSecDesc[sym_id] = 0; + struct xran_prb_map *pRbMap = NULL; + if(sym == XRAN_FULL_CB_SYM) //full slot callback only + { + for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCellIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + psIoCtrl->io_buff_perMu[mu].nRxPktBufCtrl[ntti][nCellIdx][ant_id][sym_id] = pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt; + pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt = 0; } } } - } - rte_pause(); + rte_pause(); + } /*for nCellIDx*/ MLogTask(PID_GNB_SYM_CB, t1, MLogTick()); return; } void -app_io_xran_fh_rx_prach_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_rx_prach_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { uint64_t t1 = MLogTick(); uint32_t mlogVar[10]; uint32_t mlogVarCnt = 0; + int32_t nCellIdx; + struct xran_cb_tag *pTag = (struct xran_cb_tag *) pCallbackTag; + int32_t o_xu_id = pTag->oXuId; + struct xran_io_shared_ctrl *psIoCtrl = app_io_xran_if_ctrl_get(o_xu_id); + struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; + uint32_t xran_max_antenna_nr_prach = RTE_MIN(pXranConf->neAxcUl, XRAN_MAX_PRACH_ANT_NUM); + uint32_t ant_id, sym_id; + int32_t nSlotIdx, ntti; + + if(unlikely(psIoCtrl == NULL)) + { + printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); + return; + } + + nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ + ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN -1) % XRAN_N_FE_BUF_LEN; mlogVar[mlogVarCnt++] = 0xDDDDDDDD; mlogVar[mlogVarCnt++] = status >> 16; /* tti */ mlogVar[mlogVarCnt++] = status & 0xFF; /* sym */ MLogAddVariables(mlogVarCnt, mlogVar, MLogTick()); + for(nCellIdx = pTag->cellId; nCellIdx < (pTag->cellId + pXranConf->nCC); ++nCellIdx) + { + struct xran_prb_map *pRbMap = NULL; + for(ant_id = 0; ant_id < xran_max_antenna_nr_prach; ant_id++) + { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCellIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + psIoCtrl->io_buff_perMu[mu].nPRACHRxPktBufCtrl[ntti][nCellIdx][ant_id][sym_id] = pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt; + pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt = 0; + } + } + } rte_pause(); MLogTask(PID_GNB_PRACH_CB, t1, MLogTick()); } void -app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_rx_csirs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) +{ + uint64_t t1 = MLogTick(); + uint32_t mlogVar[10]; + uint32_t mlogVarCnt = 0; + int32_t nCellIdx; + int32_t sym, nSlotIdx, ntti; + struct xran_cb_tag *pTag = (struct xran_cb_tag *) pCallbackTag; + int32_t o_xu_id = pTag->oXuId; + struct xran_io_shared_ctrl *psIoCtrl = app_io_xran_if_ctrl_get(o_xu_id); + struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; + uint32_t ant_id, sym_id; + struct xran_buffer_list *pBufList; + nCellIdx = pTag->cellId; + nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ + sym = pTag->symbol & 0xFF; /* sym */ + ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN-1) % XRAN_N_FE_BUF_LEN; + + { + mlogVar[mlogVarCnt++] = 0xCCCCCCCC; + mlogVar[mlogVarCnt++] = o_xu_id; + mlogVar[mlogVarCnt++] = nCellIdx; + mlogVar[mlogVarCnt++] = sym; + mlogVar[mlogVarCnt++] = nSlotIdx; + mlogVar[mlogVarCnt++] = ntti; + MLogAddVariables(mlogVarCnt, mlogVar, MLogTick()); + } + + if(unlikely(psIoCtrl == NULL)) + { + printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); + return; + } + for(nCellIdx = pTag->cellId; nCellIdx < (pTag->cellId + pXranConf->nCC); ++nCellIdx) + { + struct xran_prb_map *pRbMap = NULL; + if(sym == XRAN_FULL_CB_SYM) { //full slot callback only + for(ant_id = 0; ant_id < XRAN_MAX_CSIRS_PORTS; ant_id++) { + pBufList = &(psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList); /* To shorten reference */ + if(pBufList->pBuffers && pBufList->pBuffers->pData) + { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; + if(pRbMap != NULL){ + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + psIoCtrl->io_buff_perMu[mu].nCSIRSRxPktBufCtrl[ntti][nCellIdx][ant_id][sym_id] = pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt; + pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt = 0; + } + } + } + } + } + } + MLogTask(PID_GNB_CSIRS_CB, t1, MLogTick()); +} + +void +app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { uint64_t t1 = MLogTick(); uint32_t mlogVar[10]; @@ -249,12 +349,9 @@ app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status) struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; uint32_t xran_max_antenna_nr = RTE_MAX(pXranConf->neAxc, pXranConf->neAxcUl); //int32_t nSectorNum = pXranConf->nCC; - uint32_t ant_id, sym_id, idxElm; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; + uint32_t ant_id, sym_id; uint32_t xran_max_ant_array_elm_nr = RTE_MAX(pXranConf->nAntElmTRx, xran_max_antenna_nr); - nCellIdx = pTag->cellId; nSlotIdx = pTag->slotiId; ///((status >> 16) & 0xFFFF); /** TTI aka slotIdx */ sym = pTag->symbol & 0xFF; /* sym */ ntti = (nSlotIdx + XRAN_N_FE_BUF_LEN-1) % XRAN_N_FE_BUF_LEN; @@ -262,30 +359,31 @@ app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status) { mlogVar[mlogVarCnt++] = 0xCCCCCCCC; mlogVar[mlogVarCnt++] = o_xu_id; - mlogVar[mlogVarCnt++] = nCellIdx; + mlogVar[mlogVarCnt++] = pTag->cellId; mlogVar[mlogVarCnt++] = sym; mlogVar[mlogVarCnt++] = nSlotIdx; mlogVar[mlogVarCnt++] = ntti; MLogAddVariables(mlogVarCnt, mlogVar, MLogTick()); } - if(psIoCtrl == NULL) + if(unlikely(psIoCtrl == NULL)) { printf("psIoCtrl NULL! o_xu_id= %d\n", o_xu_id); return; } - - if(sym == XRAN_FULL_CB_SYM) { //full slot callback only - for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL){ - printf("(%d:%d:%d)pRbMap == NULL\n", nCellIdx, ntti, ant_id); - exit(-1); - } - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - pRbElm->nSecDesc[sym_id] = 0; + for(nCellIdx = pTag->cellId; nCellIdx < (pTag->cellId + pXranConf->nCC); ++nCellIdx) + { + struct xran_prb_map *pRbMap = NULL; + if(sym == XRAN_FULL_CB_SYM) { //full slot callback only + for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[ntti][nCellIdx][ant_id].sBufferList.pBuffers->pData; + if(unlikely(pRbMap == NULL)){ + printf("(%d:%d:%d)pRbMap == NULL\n", nCellIdx, ntti, ant_id); + exit(-1); + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + psIoCtrl->io_buff_perMu[mu].nSRSRxPktBufCtrl[ntti][nCellIdx][ant_id][sym_id] = pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt; + pRbMap->sFrontHaulRxPacketCtrl[sym_id].nRxPkt = 0; } } } @@ -294,7 +392,7 @@ app_io_xran_fh_rx_srs_callback(void *pCallbackTag, xran_status_t status) } void -app_io_xran_fh_rx_bfw_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_rx_bfw_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { uint64_t t1 = MLogTick(); uint32_t mlogVar[10]; @@ -310,7 +408,7 @@ app_io_xran_fh_rx_bfw_callback(void *pCallbackTag, xran_status_t status) } int32_t -app_io_xran_dl_tti_call_back(void * param) +app_io_xran_dl_tti_call_back(void * param, uint8_t mu) { uint64_t t1 = MLogTick(); rte_pause(); @@ -319,7 +417,7 @@ app_io_xran_dl_tti_call_back(void * param) } int32_t -app_io_xran_ul_half_slot_call_back(void * param) +app_io_xran_ul_half_slot_call_back(void * param, uint8_t mu) { uint64_t t1 = MLogTick(); rte_pause(); @@ -328,7 +426,7 @@ app_io_xran_ul_half_slot_call_back(void * param) } int32_t -app_io_xran_ul_full_slot_call_back(void * param) +app_io_xran_ul_full_slot_call_back(void * param, uint8_t mu) { uint64_t t1 = MLogTick(); rte_pause(); @@ -381,33 +479,12 @@ app_io_xran_interface(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg, UsecaseConfig struct xran_io_shared_ctrl *psIoCtrl = app_io_xran_if_ctrl_get(o_xu_id); int32_t nSectorIndex[XRAN_MAX_SECTOR_NR]; int32_t nSectorNum; - int32_t i, j, k = 0, z; + int32_t i, j, k = 0, z, l; void *ptr; void *mb; void *ring; uint32_t *u32dptr; - uint32_t xran_max_antenna_nr = RTE_MAX(p_o_xu_cfg->numAxc, p_o_xu_cfg->numUlAxc); - uint32_t xran_max_ant_array_elm_nr = RTE_MAX(p_o_xu_cfg->antElmTRx, xran_max_antenna_nr); - uint32_t xran_max_sections_per_slot = RTE_MAX(p_o_xu_cfg->max_sections_per_slot, XRAN_MIN_SECTIONS_PER_SLOT); - uint32_t xran_max_prb = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number,p_o_xu_cfg->nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA); - uint32_t numPrbElm = xran_get_num_prb_elm(p_o_xu_cfg->p_PrbMapDl, p_o_xu_cfg->mtu); - uint32_t size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*(numPrbElm); - uint32_t xran_max_antenna_nr_prach = RTE_MIN(xran_max_antenna_nr, XRAN_MAX_PRACH_ANT_NUM); - - SWXRANInterfaceTypeEnum eInterfaceType; - - struct xran_buffer_list *pFthTxBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthTxPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxRachBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxRachBufferDecomp[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxSrsBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthRxSrsPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; - - struct xran_buffer_list *pFthRxCpPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; - struct xran_buffer_list *pFthTxCpPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; if(psBbuIo == NULL) rte_panic("psBbuIo == NULL\n"); @@ -415,12 +492,14 @@ app_io_xran_interface(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg, UsecaseConfig if(psIoCtrl == NULL) rte_panic("psIoCtrl == NULL\n"); - for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++) + printf ("XRAN front haul xran_mm_init \n"); + status = xran_mm_init (app_io_xran_handle[0], (uint64_t) SW_FPGA_FH_TOTAL_BUFFER_LEN, SW_FPGA_SEGMENT_BUFFER_LEN); + if (status != XRAN_STATUS_SUCCESS) { - nSectorIndex[nSectorNum] = nSectorNum; + printf ("Failed at XRAN front haul xran_mm_init \n"); + exit(-1); } - - nSectorNum = p_o_xu_cfg->numCC; + printf("Sucess xran_mm_init \n"); if(o_xu_id == 0) { psBbuIo->num_o_ru = p_use_cfg->oXuNum; @@ -454,18 +533,9 @@ app_io_xran_interface(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg, UsecaseConfig } } - nSectorNum = p_o_xu_cfg->numCC; - printf ("XRAN front haul xran_mm_init \n"); - status = xran_mm_init (app_io_xran_handle, (uint64_t) SW_FPGA_FH_TOTAL_BUFFER_LEN, SW_FPGA_SEGMENT_BUFFER_LEN); - if (status != XRAN_STATUS_SUCCESS) - { - printf ("Failed at XRAN front haul xran_mm_init \n"); - exit(-1); - } - psBbuIo->nInstanceNum[o_xu_id] = p_o_xu_cfg->numCC; if (o_xu_id < XRAN_PORTS_NUM) { - status = xran_sector_get_instances (o_xu_id, app_io_xran_handle, + status = xran_sector_get_instances (o_xu_id, app_io_xran_handle[0], psBbuIo->nInstanceNum[o_xu_id], &psBbuIo->nInstanceHandle[o_xu_id][0]); if (status != XRAN_STATUS_SUCCESS) { @@ -480,554 +550,756 @@ app_io_xran_interface(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg, UsecaseConfig exit(-1); } - printf("Sucess xran_mm_init \n"); + uint32_t xran_max_antenna_nr = RTE_MAX(p_o_xu_cfg->numAxc, p_o_xu_cfg->numUlAxc); + uint32_t xran_max_ant_array_elm_nr = RTE_MAX(p_o_xu_cfg->antElmTRx, xran_max_antenna_nr); + if(p_o_xu_cfg->max_sections_per_slot > XRAN_MAX_SECTIONS_PER_SLOT) + { + printf("Requested value for max sections per slot (%u) is greater than what we support (%u)\n", + p_o_xu_cfg->max_sections_per_slot, XRAN_MAX_SECTIONS_PER_SLOT); + exit(1); + } + + uint32_t xran_max_antenna_nr_prach = RTE_MIN(xran_max_antenna_nr, XRAN_MAX_PRACH_ANT_NUM); + SWXRANInterfaceTypeEnum eInterfaceType; + + struct xran_buffer_list *pFthTxBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthTxPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxRachBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxRachBufferDecomp[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxSrsBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthRxSrsPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthTxCsirsBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthTxCsirsPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS][XRAN_N_FE_BUF_LEN]; + + struct xran_buffer_list *pFthRxCpPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; + struct xran_buffer_list *pFthTxCpPrbMapBuffer[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN]; + printf("nSectorNum %d\n", nSectorNum); - printf("xran_max_sections_per_slot %d\n", xran_max_sections_per_slot); + nSectorNum = p_o_xu_cfg->numCC; + uint32_t numPrbElm, size_of_prb_map; /* Init Memory */ for(i = 0; i < nSectorNum; i++) { + numPrbElm = xran_get_num_prb_elm(p_o_xu_cfg->p_PrbMapDl[p_o_xu_cfg->mu_number[0]], p_o_xu_cfg->mtu); + + if(numPrbElm == 0) + numPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; + + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*(numPrbElm); + eInterfaceType = XRANFTHTX_OUT; printf("nSectorIndex[%d] = %d\n",i, nSectorIndex[i]); + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); + NEXT_POW2(2*p_o_xu_cfg->numMu*XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, + nSW_ToFpga_FTH_TxBufferLen); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_init , status %d\n", status); } - for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) - { - for(z = 0; z < xran_max_antenna_nr; z++){ - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulTxBuffers[j][i][z][0]; - - for(k = 0; k < XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) - { - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nSW_ToFpga_FTH_TxBufferLen; // 14 symbols 3200bytes/symbol - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; - status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i], psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); - if(XRAN_STATUS_SUCCESS != status){ - rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); - } - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; - if(ptr){ - u32dptr = (uint32_t*)(ptr); - memset(u32dptr, 0x0, nSW_ToFpga_FTH_TxBufferLen); - // ptr_temp[0] = j; // TTI - // ptr_temp[1] = i; // Sec - // ptr_temp[2] = z; // Ant - // ptr_temp[3] = k; // sym - } - if(psBbuIo->bbu_offload){ - status = xran_bm_allocate_ring(psBbuIo->nInstanceHandle[o_xu_id][i], "TXO", i, j, z, k, &ring); - if(XRAN_STATUS_SUCCESS != status){ - rte_panic("Failed at xran_bm_allocate_ring , status %d\n",status); - } - psIoCtrl->sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pRing = (void *)ring; - } - } + printf("size_of_prb_map %d\n", size_of_prb_map); + + eInterfaceType = XRANFTHTX_PRB_MAP_OUT; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, + size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init , status %d\n", status); } + + eInterfaceType = XRANFTHRX_IN; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); + if(XRAN_STATUS_SUCCESS != status) + { + printf("Failed at xran_bm_init, status %d\n", status); + iAssert(status == XRAN_STATUS_SUCCESS); } - /* C-plane DL */ - printf("size_of_prb_map %d\n", size_of_prb_map); + /* C-plane */ + eInterfaceType = XRANFTHRX_PRB_MAP_IN; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } - eInterfaceType = XRANFTHTX_PRB_MAP_OUT; + if(p_o_xu_cfg->appMode == APP_O_RU){ + /* C-plane Rx */ + eInterfaceType = XRANCP_PRB_MAP_IN_RX; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT, size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + + eInterfaceType = XRANCP_PRB_MAP_IN_TX; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + } + + eInterfaceType = XRANFTHRACH_IN; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i],&psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr_prach*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, PRACH_PLAYBACK_BUFFER_BYTES); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + eInterfaceType = XRANFTHRACH_PRB_MAP_IN; status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, + size_of_prb_map); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_init , status %d\n", status); } - for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) + if(xran_max_ant_array_elm_nr) { + eInterfaceType = XRANSRS_IN; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i],&psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_ant_array_elm_nr*XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); + + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + + /* SRS C-plane */ + eInterfaceType = XRANSRS_PRB_MAP_IN; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_ant_array_elm_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + } + + if(p_o_xu_cfg->csirsEnable) { /*CSI-RS enable condition*/ + numPrbElm = xran_get_num_prb_elm(p_o_xu_cfg->p_PrbMapCsiRs, p_o_xu_cfg->mtu); + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*(numPrbElm); + eInterfaceType = XRANCSIRS_TX; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i],&psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*XRAN_MAX_CSIRS_PORTS*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); + + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + /* CSIRS C-plane */ + eInterfaceType = XRANCSIRS_PRB_MAP_TX; + status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], + p_o_xu_cfg->numMu*NEXT_POW2(XRAN_N_FE_BUF_LEN*XRAN_MAX_CSIRS_PORTS*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_init, status %d\n", status); + } + } + } /* per CC xran_bm_init */ + + + for(l = 0; l < p_o_xu_cfg->numMu; l++) + { + uint8_t mu = p_o_xu_cfg->mu_number[l]; + uint32_t xran_max_prb = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu,p_o_xu_cfg->perMu[mu].nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA); + numPrbElm = xran_get_num_prb_elm(p_o_xu_cfg->p_PrbMapDl[mu], p_o_xu_cfg->mtu); + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*(numPrbElm); + + nSectorNum = p_o_xu_cfg->numCC; + + /* Init Memory - TX (UP, CP) */ + for(i = 0; i < nSectorNum; i++) { - for(z = 0; z < xran_max_antenna_nr; z++){ - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulTxPrbMapBuffers[j][i][z]; - - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + eInterfaceType = XRANFTHTX_OUT; + for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) + { + for(z = 0; z < xran_max_antenna_nr; z++) + { + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBuffers[j][i][z][0]; + + for(k = 0; k < XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) + { + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nSW_ToFpga_FTH_TxBufferLen; // 14 symbols 3200bytes/symbol + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i], + psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], &ptr, &mb); + if(XRAN_STATUS_SUCCESS != status){ + rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); + } + + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; + + if(ptr){ + u32dptr = (uint32_t*)(ptr); + memset(u32dptr, 0x0, nSW_ToFpga_FTH_TxBufferLen); + // ptr_temp[0] = j; // TTI + // ptr_temp[1] = i; // Sec + // ptr_temp[2] = z; // Ant + // ptr_temp[3] = k; // sym + } + + if(psBbuIo->bbu_offload) + { + status = xran_bm_allocate_ring(psBbuIo->nInstanceHandle[o_xu_id][i], "TXO", i, j, z, k, &ring); + + if(XRAN_STATUS_SUCCESS != status){ + rte_panic("Failed at xran_bm_allocate_ring , status %d\n",status); + } + + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pRing = (void *)ring; + } + } /* symbol loop */ + } /* antenna loop */ + } /* XRAN_N_FE_BUF_LEN loop */ + + eInterfaceType = XRANFTHTX_PRB_MAP_OUT; + /* ---------- C-plane DL ----------- */ + for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) + { + for(z = 0; z < xran_max_antenna_nr; z++) + { + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBuffers[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i], psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); } - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; - psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; if(ptr){ struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; - memset(p_rb_map, 0, size_of_prb_map); + memset(p_rb_map, 0, size_of_prb_map); if (p_o_xu_cfg->appMode == APP_O_DU) { if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ - xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); - } - else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu); - } + if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ + xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); + } + else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu); + } } else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl, ptr, p_o_xu_cfg->mtu); + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl[mu], ptr, p_o_xu_cfg->mtu); } } else { if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ - xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); + if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ + xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); + } + else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu); } - else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu); + } else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapUl[mu], ptr, p_o_xu_cfg->mtu); } - } else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapUl, ptr, p_o_xu_cfg->mtu); } } - } - } - } - } + } /* CP antenna loop */ + } /* CP XRAN_N_FE_BUF_LEN loop */ + } /* CC loop */ - for(i = 0; inInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); - if(XRAN_STATUS_SUCCESS != status) + /* Init Memory - RX (UP, CP) */ + for(i = 0; isFrontHaulRxBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulRxBuffers[j][i][z][0]; - for(k = 0; k< XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) - { - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nFpgaToSW_FTH_RxBufferLen; // 1 symbols 3200bytes - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; - status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); - } - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; - psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *) mb; - if(ptr){ - u32dptr = (uint32_t*)(ptr); - //uint8_t *ptr_temp = (uint8_t *)ptr; - memset(u32dptr, 0x0, nFpgaToSW_FTH_RxBufferLen); - // ptr_temp[0] = j; // TTI - // ptr_temp[1] = i; // Sec - // ptr_temp[2] = z; // Ant - // ptr_temp[3] = k; // sym + eInterfaceType = XRANFTHRX_IN; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) + { + for(z = 0; z < xran_max_antenna_nr; z++){ + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBuffers[j][i][z][0]; + for(k = 0; k< XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) + { + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nFpgaToSW_FTH_RxBufferLen; // 1 symbols 3200bytes + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *) mb; + if(ptr){ + u32dptr = (uint32_t*)(ptr); + //uint8_t *ptr_temp = (uint8_t *)ptr; + memset(u32dptr, 0x0, nFpgaToSW_FTH_RxBufferLen); + // ptr_temp[0] = j; // TTI + // ptr_temp[1] = i; // Sec + // ptr_temp[2] = z; // Ant + // ptr_temp[3] = k; // sym + } } } } - } - /* C-plane */ - eInterfaceType = XRANFTHRX_PRB_MAP_IN; - status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_init, status %d\n", status); - } - - for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { - for(z = 0; z < xran_max_antenna_nr; z++){ - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulRxPrbMapBuffers[j][i][z]; - - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + eInterfaceType = XRANFTHRX_PRB_MAP_IN; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < xran_max_antenna_nr; z++){ + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBuffers[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); } - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; - psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; if(ptr){ struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; - memset(p_rb_map, 0, size_of_prb_map); + memset(p_rb_map, 0, size_of_prb_map); if (p_o_xu_cfg->appMode == APP_O_DU) { if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ - xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); - } - else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu); - } + if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ + xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); + } + else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu); + } } else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapUl, ptr, p_o_xu_cfg->mtu); + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapUl[mu], ptr, p_o_xu_cfg->mtu); } } else { if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ - xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); - } - else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu); + if(p_o_xu_cfg->RunSlotPrbMapBySymbolEnable){ + xran_init_PrbMap_by_symbol_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu, xran_max_prb); + } + else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], ptr, p_o_xu_cfg->mtu); + } + } else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl[mu], ptr, p_o_xu_cfg->mtu); } - } else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl, ptr, p_o_xu_cfg->mtu); } } } } - } - if(p_o_xu_cfg->appMode == APP_O_RU){ - /* C-plane Rx */ - eInterfaceType = XRANCP_PRB_MAP_IN_RX; - status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT, size_of_prb_map); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_init, status %d\n", status); - } - - for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { - for(z = 0; z < xran_max_antenna_nr; z++){ - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulCpRxPrbMapBbuIoBufCtrl[j][i][z]; - - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; - status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); - } - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; - psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + if(p_o_xu_cfg->appMode == APP_O_RU){ + /* C-plane Rx */ + eInterfaceType = XRANCP_PRB_MAP_IN_RX; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < xran_max_antenna_nr; z++){ + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulCpRxPrbMapBbuIoBufCtrl[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; - if(ptr){ - struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; - memset(p_rb_map, 0, size_of_prb_map); + if(ptr){ + struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; + memset(p_rb_map, 0, size_of_prb_map); - if(p_o_xu_cfg->RunSlotPrbMapEnabled) { + if(p_o_xu_cfg->RunSlotPrbMapEnabled) { memcpy(ptr, p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], size_of_prb_map); } else { - memcpy(ptr, p_o_xu_cfg->p_PrbMapDl, size_of_prb_map); + memcpy(ptr, p_o_xu_cfg->p_PrbMapDl[mu], size_of_prb_map); } } - } - } + } + } + /* C-plane Tx */ + eInterfaceType = XRANCP_PRB_MAP_IN_TX; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < xran_max_antenna_nr; z++){ + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFrontHaulCpTxPrbMapBbuIoBufCtrl[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + if(ptr){ + struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; + memset(p_rb_map, 0, size_of_prb_map); -/* C-plane Tx */ - eInterfaceType = XRANCP_PRB_MAP_IN_TX; - status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); - if(XRAN_STATUS_SUCCESS != status){ - rte_panic("Failed at xran_bm_init, status %d\n", status); - } + if(p_o_xu_cfg->RunSlotPrbMapEnabled) { + memcpy(ptr, p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], size_of_prb_map); + } else { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl[mu], ptr, p_o_xu_cfg->mtu); + } + } + } /* antenna loop */ + } /* XRAN_N_FE_BUF_LEN loop */ + } /* if RU */ + } /* CC loop */ - for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { - for(z = 0; z < xran_max_antenna_nr; z++){ - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFrontHaulCpTxPrbMapBbuIoBufCtrl[j][i][z]; - - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; - status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); + // add prach rx buffer + eInterfaceType = XRANFTHRACH_IN; + for(i = 0; iio_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = xran_max_antenna_nr_prach; // ant number. + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHPrachRxBuffers[j][i][z][0]; + for(k = 0; k< XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) + { + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = PRACH_PLAYBACK_BUFFER_BYTES; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + + if (p_o_xu_cfg->appMode == APP_O_RU) { + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer, status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; + if(ptr){ + u32dptr = (uint32_t*)(ptr); + memset(u32dptr, 0x0, PRACH_PLAYBACK_BUFFER_BYTES); } - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; - psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; - if(ptr){ - struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; - memset(p_rb_map, 0, size_of_prb_map); - - if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - memcpy(ptr, p_o_xu_cfg->p_RunSlotPrbMap[XRAN_DIR_DL][j][i][z], size_of_prb_map); - } else { - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapDl, ptr, p_o_xu_cfg->mtu); } } } } } - } - - // add prach rx buffer - for(i = 0; inInstanceHandle[o_xu_id][i],&psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_antenna_nr_prach*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, PRACH_PLAYBACK_BUFFER_BYTES); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_init, status %d\n", status); - } - for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) + // add prach prbmap buffer + eInterfaceType = XRANFTHRACH_PRB_MAP_IN; + for(i = 0; isFHPrachRxBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = xran_max_antenna_nr_prach; // ant number. - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFHPrachRxBuffers[j][i][z][0]; - psIoCtrl->sFHPrachRxBbuIoBufCtrlDecomp[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFHPrachRxBuffersDecomp[j][i][z][0]; - for(k = 0; k< XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) - { - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = PRACH_PLAYBACK_BUFFER_BYTES; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) + { + for(z = 0; z < xran_max_antenna_nr_prach; z++){ + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBuffers[j][i][z]; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer, status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + if(ptr){ + u32dptr = (uint32_t*)(ptr); + memset(u32dptr, 0x0, size_of_prb_map); + } + } + } + } - if (p_o_xu_cfg->appMode == APP_O_RU) { + /* add SRS rx buffer */ + printf("%s:%d: xran_max_ant_array_elm_nr %d\n", __FUNCTION__, __LINE__, xran_max_ant_array_elm_nr); + for(i = 0; iio_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = xran_max_ant_array_elm_nr; /* ant number */ + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHSrsRxBuffers[j][i][z][0]; + for(k = 0; k < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; k++) + { + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nSW_ToFpga_FTH_TxBufferLen; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_allocate_buffer, status %d\n",status); } - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; - psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; if(ptr){ u32dptr = (uint32_t*)(ptr); - memset(u32dptr, 0x0, PRACH_PLAYBACK_BUFFER_BYTES); + memset(u32dptr, 0x0, nSW_ToFpga_FTH_TxBufferLen); } - psIoCtrl->sFHPrachRxBbuIoBufCtrlDecomp[j][i][z].sBufferList.pBuffers[k].pData= (uint8_t *)ptr; } } } - } - } - - /* add SRS rx buffer */ - printf("%s:%d: xran_max_ant_array_elm_nr %d\n", __FUNCTION__, __LINE__, xran_max_ant_array_elm_nr); - for(i = 0; inInstanceHandle[o_xu_id][i],&psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_ant_array_elm_nr*XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT)-1, nSW_ToFpga_FTH_TxBufferLen); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_init, status %d\n", status); - } - for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) { - for(z = 0; z < xran_max_ant_array_elm_nr; z++){ - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = xran_max_ant_array_elm_nr; /* ant number */ - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFHSrsRxBuffers[j][i][z][0]; - for(k = 0; k < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; k++) - { - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nSW_ToFpga_FTH_TxBufferLen; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + eInterfaceType = XRANSRS_PRB_MAP_IN; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < xran_max_ant_array_elm_nr; z++) { + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBuffers[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_allocate_buffer, status %d\n",status); + rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); } - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; - psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; - if(ptr){ - u32dptr = (uint32_t*)(ptr); - memset(u32dptr, 0x0, nSW_ToFpga_FTH_TxBufferLen); + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + + if(ptr) { + struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; + memset(p_rb_map, 0, size_of_prb_map); + if(p_o_xu_cfg->RunSlotPrbMapEnabled) + { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_RunSrsSlotPrbMap[XRAN_DIR_UL][j][i][z], ptr, p_o_xu_cfg->mtu); + } + else + { + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapSrs, ptr, p_o_xu_cfg->mtu); + } } } } } - /* SRS C-plane */ - eInterfaceType = XRANSRS_PRB_MAP_IN; - status = xran_bm_init(psBbuIo->nInstanceHandle[o_xu_id][i], &psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType], - NEXT_POW2(XRAN_N_FE_BUF_LEN*xran_max_ant_array_elm_nr*XRAN_NUM_OF_SYMBOL_PER_SLOT)-1, size_of_prb_map); - if(XRAN_STATUS_SUCCESS != status) { - rte_panic("Failed at xran_bm_init, status %d\n", status); - } + /* CSI-RS buffers */ + for(i = 0; icsirsEnable); i++) { + /*Parameters to initialize memory for CSI-RS prbMap*/ + numPrbElm = xran_get_num_prb_elm(p_o_xu_cfg->p_PrbMapCsiRs, p_o_xu_cfg->mtu); + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*(numPrbElm); + eInterfaceType = XRANCSIRS_TX; + for(j = 0; j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < XRAN_MAX_CSIRS_PORTS; z++){ + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_MAX_CSIRS_PORTS; /* ports number */ + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBuffers[j][i][z][0]; + for(k = 0; k < XRAN_NUM_OF_SYMBOL_PER_SLOT; k++) + { + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nElementLenInBytes = nSW_ToFpga_FTH_TxBufferLen; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].nOffsetInBytes = 0; + status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); + if(XRAN_STATUS_SUCCESS != status) { + rte_panic("Failed at xran_bm_allocate_buffer, status %d\n",status); + } + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList.pBuffers[k].pCtrl = (void *)mb; + if(ptr){ + u32dptr = (uint32_t*)(ptr); + memset(u32dptr, 0x0, nSW_ToFpga_FTH_TxBufferLen); + } + } + } + } - for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { - for(z = 0; z < xran_max_ant_array_elm_nr; z++) { - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->sFHSrsRxPrbMapBuffers[j][i][z]; - - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; + eInterfaceType = XRANCSIRS_PRB_MAP_TX; + for(j = 0;j < XRAN_N_FE_BUF_LEN; j++) { + for(z = 0; z < p_o_xu_cfg->nCsiPorts; z++) { + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].bValid = 0; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].nSegGenerated = -1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].nSegToBeGen = -1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].nSegTransferred = 0; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.nNumBuffers = XRAN_NUM_OF_SYMBOL_PER_SLOT; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers = &psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBuffers[j][i][z]; + + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nElementLenInBytes = size_of_prb_map; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nNumberOfElements = 1; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->nOffsetInBytes = 0; status = xran_bm_allocate_buffer(psBbuIo->nInstanceHandle[o_xu_id][i],psBbuIo->nBufPoolIndex[o_xu_id][nSectorIndex[i]][eInterfaceType],&ptr, &mb); if(XRAN_STATUS_SUCCESS != status) { rte_panic("Failed at xran_bm_allocate_buffer , status %d\n",status); } - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; - psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pData = (uint8_t *)ptr; + psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList.pBuffers->pCtrl = (void *)mb; if(ptr) { struct xran_prb_map * p_rb_map = (struct xran_prb_map *)ptr; - memset(p_rb_map, 0, size_of_prb_map); - - if (p_o_xu_cfg->appMode == APP_O_DU) { - if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - memcpy(ptr, p_o_xu_cfg->p_RunSrsSlotPrbMap[XRAN_DIR_UL][j][i][z], size_of_prb_map); - } else { - memcpy(ptr, p_o_xu_cfg->p_PrbMapSrs, size_of_prb_map); - } - } else { - if(p_o_xu_cfg->RunSlotPrbMapEnabled) { - memcpy(ptr, p_o_xu_cfg->p_RunSrsSlotPrbMap[XRAN_DIR_DL][j][i][z], size_of_prb_map); - } else { - //memcpy(ptr, p_o_xu_cfg->p_PrbMapSrs, size_of_prb_map); - xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapSrs, ptr, p_o_xu_cfg->mtu); - } - } + memset(p_rb_map, 0, size_of_prb_map); + xran_init_PrbMap_from_cfg(p_o_xu_cfg->p_PrbMapCsiRs, ptr, p_o_xu_cfg->mtu); + } } } } - } - for(i=0; isFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList); - pFthTxPrbMapBuffer[i][z][j] = &(psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); - pFthRxBuffer[i][z][j] = &(psIoCtrl->sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList); - pFthRxPrbMapBuffer[i][z][j] = &(psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); - pFthRxRachBuffer[i][z][j] = &(psIoCtrl->sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList); - pFthRxRachBufferDecomp[i][z][j] = &(psIoCtrl->sFHPrachRxBbuIoBufCtrlDecomp[j][i][z].sBufferList); - pFthRxCpPrbMapBuffer[i][z][j] = &(psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); - pFthTxCpPrbMapBuffer[i][z][j] = &(psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); - } + for(j=0; jio_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[j][i][z].sBufferList); + pFthTxPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFrontHaulRxBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxRachBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxRachBufferDecomp[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxCpPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + pFthTxCpPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + } - for(z = 0; z < XRAN_MAX_ANT_ARRAY_ELM_NR && xran_max_ant_array_elm_nr; z++){ - pFthRxSrsBuffer[i][z][j] = &(psIoCtrl->sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList); - pFthRxSrsPrbMapBuffer[i][z][j] = &(psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + for(z = 0; z < XRAN_MAX_ANT_ARRAY_ELM_NR && xran_max_ant_array_elm_nr; z++){ + pFthRxSrsBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[j][i][z].sBufferList); + pFthRxSrsPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + } + + for(z = 0; z < XRAN_MAX_CSIRS_PORTS && (p_o_xu_cfg->csirsEnable); z++){ + pFthTxCsirsBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[j][i][z].sBufferList); + pFthTxCsirsPrbMapBuffer[i][z][j] = &(psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[j][i][z].sBufferList); + } } } - } - if(NULL != psBbuIo->nInstanceHandle[o_xu_id]) - { - /* add pusch callback */ for (i = 0; iRxCbTag[o_xu_id][i].oXuId = o_xu_id; - psBbuIo->RxCbTag[o_xu_id][i].cellId = i; - psBbuIo->RxCbTag[o_xu_id][i].symbol = 0; - psBbuIo->RxCbTag[o_xu_id][i].slotiId = 0; - if(psBbuIo->bbu_offload) - xran_5g_fronthault_config (psBbuIo->nInstanceHandle[o_xu_id][i], - pFthTxBuffer[i], - pFthTxPrbMapBuffer[i], - pFthRxBuffer[i], - pFthRxPrbMapBuffer[i], - app_io_xran_fh_bbu_rx_callback, &psBbuIo->RxCbTag[o_xu_id][i]); - else - xran_5g_fronthault_config (psBbuIo->nInstanceHandle[o_xu_id][i], - pFthTxBuffer[i], - pFthTxPrbMapBuffer[i], - pFthRxBuffer[i], - pFthRxPrbMapBuffer[i], - app_io_xran_fh_rx_callback, &psBbuIo->RxCbTag[o_xu_id][i]); - } - /* add BFWs callback here */ - for (i = 0; iBfwCbTag[o_xu_id][i].cellId = o_xu_id; - psBbuIo->BfwCbTag[o_xu_id][i].cellId = i; - psBbuIo->BfwCbTag[o_xu_id][i].symbol = 0; - psBbuIo->BfwCbTag[o_xu_id][i].slotiId = 0; + if(NULL != psBbuIo->nInstanceHandle[o_xu_id][i]) + { + /* add pusch callback */ + psBbuIo->RxCbTag[o_xu_id][i].oXuId = o_xu_id; + psBbuIo->RxCbTag[o_xu_id][i].cellId = i; + psBbuIo->RxCbTag[o_xu_id][i].symbol = 0; + psBbuIo->RxCbTag[o_xu_id][i].slotiId = 0; + if(psBbuIo->bbu_offload) + xran_5g_fronthault_config (psBbuIo->nInstanceHandle[o_xu_id][i], + pFthTxBuffer[i], + pFthTxPrbMapBuffer[i], + pFthRxBuffer[i], + pFthRxPrbMapBuffer[i], + app_io_xran_fh_bbu_rx_callback, &psBbuIo->RxCbTag[o_xu_id][i], mu); + else + xran_5g_fronthault_config (psBbuIo->nInstanceHandle[o_xu_id][i], + pFthTxBuffer[i], + pFthTxPrbMapBuffer[i], + pFthRxBuffer[i], + pFthRxPrbMapBuffer[i], + app_io_xran_fh_rx_callback, &psBbuIo->RxCbTag[o_xu_id][i],mu); + + psBbuIo->BfwCbTag[o_xu_id][i].oXuId = o_xu_id; + psBbuIo->BfwCbTag[o_xu_id][i].cellId = i; + psBbuIo->BfwCbTag[o_xu_id][i].symbol = 0; + psBbuIo->BfwCbTag[o_xu_id][i].slotiId = 0; #if 0 - if(psBbuIo->bbu_offload) - xran_5g_bfw_config(psBbuIo->nInstanceHandle[o_xu_id][i], - pFthRxCpPrbMapBuffer[i], - pFthTxCpPrbMapBuffer[i], - app_io_xran_fh_bbu_rx_bfw_callback,&psBbuIo->BfwCbTag[o_xu_id][i]); - else + if(psBbuIo->bbu_offload) + xran_5g_bfw_config(psBbuIo->nInstanceHandle[o_xu_id][i], + pFthRxCpPrbMapBuffer[i], + pFthTxCpPrbMapBuffer[i], + app_io_xran_fh_bbu_rx_bfw_callback,&psBbuIo->BfwCbTag[o_xu_id][i]); + else #endif - xran_5g_bfw_config(psBbuIo->nInstanceHandle[o_xu_id][i], - pFthRxCpPrbMapBuffer[i], - pFthTxCpPrbMapBuffer[i], - app_io_xran_fh_rx_bfw_callback,&psBbuIo->BfwCbTag[o_xu_id][i]); - } - /* add prach callback here */ - for (i = 0; iPrachCbTag[o_xu_id][i].oXuId = o_xu_id; - psBbuIo->PrachCbTag[o_xu_id][i].cellId = i; - psBbuIo->PrachCbTag[o_xu_id][i].symbol = 0; - psBbuIo->PrachCbTag[o_xu_id][i].slotiId = 0; - if(psBbuIo->bbu_offload) - xran_5g_prach_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxRachBuffer[i],pFthRxRachBufferDecomp[i], - app_io_xran_fh_bbu_rx_prach_callback,&psBbuIo->PrachCbTag[o_xu_id][i]); - else - xran_5g_prach_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxRachBuffer[i],pFthRxRachBufferDecomp[i], - app_io_xran_fh_rx_prach_callback,&psBbuIo->PrachCbTag[o_xu_id][i]); - } + xran_5g_bfw_config(psBbuIo->nInstanceHandle[o_xu_id][i], + pFthRxCpPrbMapBuffer[i], + pFthTxCpPrbMapBuffer[i], + app_io_xran_fh_rx_bfw_callback, &psBbuIo->BfwCbTag[o_xu_id][i], mu); + + psBbuIo->PrachCbTag[o_xu_id][i].oXuId = o_xu_id; + psBbuIo->PrachCbTag[o_xu_id][i].cellId = i; + psBbuIo->PrachCbTag[o_xu_id][i].symbol = 0; + psBbuIo->PrachCbTag[o_xu_id][i].slotiId = 0; + if(psBbuIo->bbu_offload) + xran_5g_prach_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxRachBuffer[i],pFthRxRachBufferDecomp[i], + app_io_xran_fh_bbu_rx_prach_callback, &psBbuIo->PrachCbTag[o_xu_id][i], mu); + else + xran_5g_prach_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxRachBuffer[i],pFthRxRachBufferDecomp[i], + app_io_xran_fh_rx_prach_callback, &psBbuIo->PrachCbTag[o_xu_id][i], mu); - /* add SRS callback here */ - for (i = 0; iSrsCbTag[o_xu_id][i].oXuId = o_xu_id; - psBbuIo->SrsCbTag[o_xu_id][i].cellId = i; - psBbuIo->SrsCbTag[o_xu_id][i].symbol = 0; - psBbuIo->SrsCbTag[o_xu_id][i].slotiId = 0; - if(psBbuIo->bbu_offload) - xran_5g_srs_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxSrsBuffer[i], pFthRxSrsPrbMapBuffer[i], - app_io_xran_fh_bbu_rx_srs_callback,&psBbuIo->SrsCbTag[o_xu_id][i]); - else - xran_5g_srs_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxSrsBuffer[i], pFthRxSrsPrbMapBuffer[i], - app_io_xran_fh_rx_srs_callback,&psBbuIo->SrsCbTag[o_xu_id][i]); + if(xran_max_ant_array_elm_nr) + { + psBbuIo->SrsCbTag[o_xu_id][i].oXuId = o_xu_id; + psBbuIo->SrsCbTag[o_xu_id][i].cellId = i; + psBbuIo->SrsCbTag[o_xu_id][i].symbol = 0; + psBbuIo->SrsCbTag[o_xu_id][i].slotiId = 0; + if(psBbuIo->bbu_offload) + xran_5g_srs_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxSrsBuffer[i], pFthRxSrsPrbMapBuffer[i], + app_io_xran_fh_bbu_rx_srs_callback,&psBbuIo->SrsCbTag[o_xu_id][i], mu); + else + xran_5g_srs_req(psBbuIo->nInstanceHandle[o_xu_id][i], pFthRxSrsBuffer[i], pFthRxSrsPrbMapBuffer[i], + app_io_xran_fh_rx_srs_callback, &psBbuIo->SrsCbTag[o_xu_id][i], mu); + } + /* CSI-RS buffers shared */ + if(p_o_xu_cfg->csirsEnable) + { + psBbuIo->CsirsCbTag[o_xu_id][i].oXuId = o_xu_id; + psBbuIo->CsirsCbTag[o_xu_id][i].cellId = i; + psBbuIo->CsirsCbTag[o_xu_id][i].symbol = 0; + psBbuIo->CsirsCbTag[o_xu_id][i].slotiId = 0; + + if(psBbuIo->bbu_offload) + xran_5g_csirs_config(psBbuIo->nInstanceHandle[o_xu_id][i], pFthTxCsirsBuffer[i], pFthTxCsirsPrbMapBuffer[i], + app_io_xran_fh_bbu_rx_csirs_callback, &psBbuIo->CsirsCbTag[o_xu_id][i], mu); + else + xran_5g_csirs_config(psBbuIo->nInstanceHandle[o_xu_id][i], pFthTxCsirsBuffer[i], pFthTxCsirsPrbMapBuffer[i], + app_io_xran_fh_rx_csirs_callback, &psBbuIo->CsirsCbTag[o_xu_id][i], mu); + } + } } - } + + } //mu loop return status; -} +} /* app_io_xran_interface */ int32_t app_io_xran_ext_type1_populate(struct xran_prb_elm* p_pRbMapElm, char *p_bfw_buffer, uint32_t mtu, uint16_t* numSetBFW_total) @@ -1043,7 +1315,7 @@ app_io_xran_ext_type1_populate(struct xran_prb_elm* p_pRbMapElm, char *p_bfw_buf if (p_pRbMapElm->bf_weight.p_ext_start) ext_buf = (int8_t *)p_pRbMapElm->bf_weight.p_ext_start; else - ext_buf = (int8_t *)xran_malloc(p_pRbMapElm->bf_weight.maxExtBufSize); + ext_buf = (int8_t *)xran_malloc("ext1_buf", p_pRbMapElm->bf_weight.maxExtBufSize, RTE_CACHE_LINE_SIZE); if(ext_buf == NULL) rte_panic("xran_malloc return NULL [sz %d]\n", p_pRbMapElm->bf_weight.maxExtBufSize); @@ -1088,7 +1360,7 @@ app_io_xran_ext_type11_populate(struct xran_prb_elm* p_pRbMapElm, char *p_tx_dl_ if (p_pRbMapElm->bf_weight.p_ext_start) extbuf = (uint8_t *)p_pRbMapElm->bf_weight.p_ext_start; else - extbuf = (uint8_t*)xran_malloc(p_pRbMapElm->bf_weight.maxExtBufSize); + extbuf = (uint8_t*)xran_malloc("ext11_buf",p_pRbMapElm->bf_weight.maxExtBufSize, RTE_CACHE_LINE_SIZE); if(extbuf == NULL) rte_panic("xran_malloc return NULL [sz %d]\n", p_pRbMapElm->bf_weight.maxExtBufSize); @@ -1106,11 +1378,17 @@ app_io_xran_ext_type11_populate(struct xran_prb_elm* p_pRbMapElm, char *p_tx_dl_ } /* Configure source buffer and beam ID of BFWs */ +#ifdef XRAN_CP_BF_WEIGHT_STRUCT_OPT + for(i = 0; i < p_pRbMapElm->bf_weight.numSetBFWs; i++) { + p_pRbMapElm->bf_weight.bfw[0].pBFWs[i] = (uint8_t *)(p_tx_dl_bfw_buffer + p_pRbMapElm->bf_weight.nAntElmTRx*2*i); + p_pRbMapElm->bf_weight.bfw[0].beamId[i] = 0x7000+i; + } +#else for(i = 0; i < p_pRbMapElm->bf_weight.numSetBFWs; i++) { p_pRbMapElm->bf_weight.bfw[i].pBFWs = (uint8_t *)(p_tx_dl_bfw_buffer + p_pRbMapElm->bf_weight.nAntElmTRx*2*i); p_pRbMapElm->bf_weight.bfw[i].beamId = 0x7000+i; } - +#endif n_max_set_bfw = xran_cp_prepare_ext11_bfws(p_pRbMapElm->bf_weight.numSetBFWs, p_pRbMapElm->bf_weight.nAntElmTRx, p_pRbMapElm->bf_weight.bfwIqWidth, @@ -1127,35 +1405,11 @@ app_io_xran_ext_type11_populate(struct xran_prb_elm* p_pRbMapElm, char *p_tx_dl_ return status; } -int32_t -app_io_xran_iq_content_init_cp_rb_map(struct xran_prb_map* pRbMap, - enum xran_pkt_dir dir, int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, uint16_t nRBs) -{ - pRbMap->dir = dir; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = cc_id; - pRbMap->ru_port_id = ant_id; - pRbMap->tti_id = tti; - pRbMap->start_sym_id = 0; - pRbMap->nPrbElm = 1; - pRbMap->prbMap[0].nRBStart = 0; - pRbMap->prbMap[0].nRBSize = nRBs; - pRbMap->prbMap[0].nStartSymb = 0; - pRbMap->prbMap[0].numSymb = 14; - pRbMap->prbMap[0].sec_desc[sym_id][0].iq_buffer_offset = 0; - pRbMap->prbMap[0].sec_desc[sym_id][0].iq_buffer_len = nRBs *4L; - pRbMap->prbMap[0].nBeamIndex = 0; - pRbMap->prbMap[0].compMethod = XRAN_COMPMETHOD_NONE; - - return 0; -} - /** c-plane DL */ int32_t -app_io_xran_iq_content_init_cp_tx(uint8_t appMode, struct xran_fh_config *pXranConf, +app_io_xran_iq_content_init_dl_cp(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { int32_t status = 0; struct xran_prb_map* pRbMap = NULL; @@ -1163,21 +1417,18 @@ app_io_xran_iq_content_init_cp_tx(uint8_t appMode, struct xran_fh_config *pXra int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; int32_t tti_src = target_tti % p_iq->numSlots; - int32_t tx_dl_bfw_buffer_position = tti_src * (pXranConf->nDLRBs*pXranConf->nAntElmTRx)*4; + int32_t tx_dl_bfw_buffer_position = tti_src * (pXranConf->perMu[mu].nDLRBs*pXranConf->nAntElmTRx)*4; uint16_t numSetBFW_total = 0; - if(p_iq->p_tx_play_buffer[flowId]) { + if(p_iq->buff_perMu[mu].p_tx_play_buffer[flowId]) { cc_id = cc_id % XRAN_MAX_SECTOR_NR; ant_id = ant_id % XRAN_MAX_ANTENNA_NR; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; - dl_bfw_pos = ((char*)p_iq->p_tx_dl_bfw_buffer[flowId]) + tx_dl_bfw_buffer_position; + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; + dl_bfw_pos = ((char*)p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[flowId]) + tx_dl_bfw_buffer_position; if(pRbMap) { - if (pXranConf->DynamicSectionEna == 0) { - if(pRbMap->nPrbElm != 1 ) - app_io_xran_iq_content_init_cp_rb_map(pRbMap, XRAN_DIR_DL, cc_id, ant_id, sym_id, tti_dst, pXranConf->nDLRBs); - } else if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B - && appMode == APP_O_DU - && sym_id == 0) { /* BFWs are per slot */ + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B + && appMode == APP_O_DU + && sym_id == 0) { /* BFWs are per slot */ int32_t idxElm = 0; struct xran_prb_elm* p_pRbMapElm = NULL; @@ -1189,7 +1440,7 @@ app_io_xran_iq_content_init_cp_tx(uint8_t appMode, struct xran_fh_config *pXra if(p_pRbMapElm->BeamFormingType == XRAN_BEAM_WEIGHT && p_pRbMapElm->bf_weight_update) { if(p_pRbMapElm->bf_weight.extType == 1) { app_io_xran_ext_type1_populate(p_pRbMapElm, dl_bfw_pos, app_io_xran_fh_init.mtu, &numSetBFW_total); - } else { + } else { app_io_xran_ext_type11_populate(p_pRbMapElm, dl_bfw_pos, app_io_xran_fh_init.mtu); } } @@ -1209,29 +1460,26 @@ app_io_xran_iq_content_init_cp_tx(uint8_t appMode, struct xran_fh_config *pXra /** C-plane UL */ int32_t -app_io_xran_iq_content_init_cp_rx(uint8_t appMode, struct xran_fh_config *pXranConf, +app_io_xran_iq_content_init_ul_cp(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { struct xran_prb_map* pRbMap = NULL; char* ul_bfw_pos = NULL; int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; int32_t tti_src = target_tti % p_iq->numSlots; - int32_t tx_ul_bfw_buffer_position = tti_src * (pXranConf->nULRBs*pXranConf->nAntElmTRx)*4; + int32_t tx_ul_bfw_buffer_position = tti_src * (pXranConf->perMu[mu].nULRBs*pXranConf->nAntElmTRx)*4; uint16_t numSetBFW_total = 0; cc_id = cc_id % XRAN_MAX_SECTOR_NR; ant_id = ant_id % XRAN_MAX_ANTENNA_NR; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; - ul_bfw_pos = ((char*)p_iq->p_tx_ul_bfw_buffer[flowId]) + tx_ul_bfw_buffer_position; + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; + ul_bfw_pos = ((char*)p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[flowId]) + tx_ul_bfw_buffer_position; if(pRbMap) { - if (pXranConf->DynamicSectionEna == 0) { - if(pRbMap->nPrbElm != 1 ) - app_io_xran_iq_content_init_cp_rb_map(pRbMap, XRAN_DIR_UL, cc_id, ant_id, sym_id, tti_dst, pXranConf->nULRBs); - } else if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B && appMode == APP_O_DU && sym_id == 0) { int32_t idxElm = 0; @@ -1244,9 +1492,9 @@ app_io_xran_iq_content_init_cp_rx(uint8_t appMode, struct xran_fh_config *pXra if(p_pRbMapElm->BeamFormingType == XRAN_BEAM_WEIGHT && p_pRbMapElm->bf_weight_update) { if(p_pRbMapElm->bf_weight.extType == 1) { app_io_xran_ext_type1_populate(p_pRbMapElm, ul_bfw_pos, app_io_xran_fh_init.mtu, &numSetBFW_total); - } else { + } else { app_io_xran_ext_type11_populate(p_pRbMapElm, ul_bfw_pos, app_io_xran_fh_init.mtu); - } + } } /* if(p_pRbMapElm->BeamFormingType == XRAN_BEAM_WEIGHT && p_pRbMapElm->bf_weight_update) */ numSetBFW_total += p_pRbMapElm->bf_weight.numSetBFWs; } /* for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) */ @@ -1261,7 +1509,7 @@ app_io_xran_iq_content_init_cp_rx(uint8_t appMode, struct xran_fh_config *pXra int32_t app_io_xran_iq_content_init_up_tx(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { char *pos = NULL; void *ptr = NULL; @@ -1269,158 +1517,388 @@ app_io_xran_iq_content_init_up_tx(uint8_t appMode, struct xran_fh_config *pXra struct xran_prb_map* pRbMap = NULL; enum xran_comp_hdr_type staticEn = XRAN_COMP_HDR_TYPE_DYNAMIC; - int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; - int32_t tti_src = target_tti % p_iq->numSlots; - int32_t tx_play_buffer_position = tti_src * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->nDLRBs*N_SC_PER_PRB*4) + (sym_id * pXranConf->nDLRBs*N_SC_PER_PRB*4); - + bool isNb375=false; if (pXranConf != NULL) { - staticEn = pXranConf->ru_conf.xranCompHdrType; + if(APP_O_RU == appMode && mu == XRAN_NBIOT_MU && XRAN_NBIOT_UL_SCS_3_75 ==pXranConf->perMu[mu].nbIotUlScs) + { + isNb375=true; + } + int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; + int32_t tti_src = target_tti % p_iq->numSlots; + int32_t tx_play_buffer_position; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; - pos = ((char*)p_iq->p_tx_play_buffer[flowId]) + tx_play_buffer_position; - ptr = psIoCtrl->sFrontHaulTxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; + tx_play_buffer_position = tti_src * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit) + + (sym_id * pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit); + staticEn = pXranConf->ru_conf.xranCompHdrType; + + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; + pos = ((char*)p_iq->buff_perMu[mu].p_tx_play_buffer[flowId]) + tx_play_buffer_position; + ptr = psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; - if(ptr && pos) { - int32_t idxElm = 0; - u8dptr = (uint8_t*)ptr; - int16_t payload_len = 0; + if(ptr && pos) { + int32_t idxElm = 0; + u8dptr = (uint8_t*)ptr; + int16_t payload_len = 0; - uint8_t *dst = (uint8_t *)u8dptr; - uint8_t *src = (uint8_t *)pos; - uint16_t num_sections, idx, comp_method; - uint16_t prb_per_section; - struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm]; + uint8_t *dst = (uint8_t *)u8dptr; + uint8_t *src = (uint8_t *)pos; + uint16_t num_sections, idx, comp_method; + uint16_t prb_per_section; + struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm]; + struct xran_prb_elm* p_prev_prbElm; dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); - for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { - struct xran_section_desc *p_sec_desc = NULL; - p_prbMapElm = &pRbMap->prbMap[idxElm]; - p_sec_desc = &p_prbMapElm->sec_desc[sym_id][0]; + for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + struct xran_section_desc *p_sec_desc = NULL; + p_prbMapElm = &pRbMap->prbMap[idxElm]; + p_sec_desc = &p_prbMapElm->sec_desc[sym_id]; + /*Same set of IQ data (one UP packet) for overlapping PRBs with different set of reMasks*/ + if(p_prbMapElm->reMask && idxElm > 0){ + p_prev_prbElm = &pRbMap->prbMap[idxElm-1]; + if(p_prbMapElm->UP_nRBStart == p_prev_prbElm->UP_nRBStart && p_prbMapElm->UP_nRBSize == p_prev_prbElm->UP_nRBSize && \ + p_prbMapElm->nStartSymb == p_prev_prbElm->nStartSymb && p_prbMapElm->numSymb == p_prev_prbElm->numSymb) + continue; + } + + if(p_prbMapElm->bf_weight.extType == 1) + { + num_sections = p_prbMapElm->bf_weight.numSetBFWs; + prb_per_section = p_prbMapElm->bf_weight.numBundPrb; + } + else + { + num_sections = 1; + prb_per_section = p_prbMapElm->UP_nRBSize; + } - if(p_prbMapElm->bf_weight.extType == 1) - { - num_sections = p_prbMapElm->bf_weight.numSetBFWs; - prb_per_section = p_prbMapElm->bf_weight.numBundPrb; - } - else - { - num_sections = 1; - prb_per_section = p_prbMapElm->UP_nRBSize; - } + if(p_sec_desc == NULL) { + rte_panic ("p_sec_desc == NULL\n"); + } - if(p_sec_desc == NULL) { - rte_panic ("p_sec_desc == NULL\n"); - } + /* skip, if not scheduled */ + if(sym_id < p_prbMapElm->nStartSymb || sym_id >= p_prbMapElm->nStartSymb + p_prbMapElm->numSymb){ + p_sec_desc->iq_buffer_offset = 0; + p_sec_desc->iq_buffer_len = 0; + continue; + } - /* skip, if not scheduled */ - if(sym_id < p_prbMapElm->nStartSymb || sym_id >= p_prbMapElm->nStartSymb + p_prbMapElm->numSymb){ - p_sec_desc->iq_buffer_offset = 0; - p_sec_desc->iq_buffer_len = 0; - continue; - } + src = (uint8_t *)(pos + p_prbMapElm->UP_nRBStart*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit); + p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len = 0; - src = (uint8_t *)(pos + p_prbMapElm->UP_nRBStart*N_SC_PER_PRB*4L); - p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); - p_sec_desc->iq_buffer_len = 0; + for(idx=0; idx < num_sections ; idx++) + { + //printf("\nidx %hu u8dptr %p dst %p",idx,u8dptr,dst); - for(idx=0; idx < num_sections ; idx++) - { - //printf("\nidx %hu u8dptr %p dst %p",idx,u8dptr,dst); + if((idx+1)*prb_per_section > p_prbMapElm->UP_nRBSize){ + prb_per_section = (p_prbMapElm->UP_nRBSize - idx*prb_per_section); + } - if((idx+1)*prb_per_section > p_prbMapElm->UP_nRBSize){ - prb_per_section = (p_prbMapElm->UP_nRBSize - idx*prb_per_section); - } + if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { + payload_len = prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; + memcpy(dst, src, payload_len); + } else if ((p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) || (p_prbMapElm->compMethod == XRAN_COMPMETHOD_MODULATION)) { + struct xranlib_compress_request bfp_com_req; + struct xranlib_compress_response bfp_com_rsp; - if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { - payload_len = prb_per_section*N_SC_PER_PRB*4L; - memcpy(dst, src, payload_len); + memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request)); + memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response)); - } else if ((p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) || (p_prbMapElm->compMethod == XRAN_COMPMETHOD_MODULATION)) { - struct xranlib_compress_request bfp_com_req; - struct xranlib_compress_response bfp_com_rsp; + bfp_com_req.data_in = (int16_t*)src; + bfp_com_req.numRBs = prb_per_section; + bfp_com_req.len = prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; + bfp_com_req.compMethod = p_prbMapElm->compMethod; + bfp_com_req.iqWidth = p_prbMapElm->iqWidth; + bfp_com_req.ScaleFactor= p_prbMapElm->ScaleFactor; + bfp_com_req.reMask = p_prbMapElm->reMask; - memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request)); - memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response)); + bfp_com_rsp.data_out = (int8_t*)dst; + bfp_com_rsp.len = 0; - bfp_com_req.data_in = (int16_t*)src; - bfp_com_req.numRBs = prb_per_section; - bfp_com_req.len = prb_per_section*N_SC_PER_PRB*4L; - bfp_com_req.compMethod = p_prbMapElm->compMethod; - bfp_com_req.iqWidth = p_prbMapElm->iqWidth; - bfp_com_req.ScaleFactor= p_prbMapElm->ScaleFactor; - bfp_com_req.reMask = p_prbMapElm->reMask; + xranlib_compress(&bfp_com_req, &bfp_com_rsp); + payload_len = bfp_com_rsp.len; - bfp_com_rsp.data_out = (int8_t*)dst; - bfp_com_rsp.len = 0; + } else { + printf ("p_prbMapElm->compMethod == %d is not supported\n", + p_prbMapElm->compMethod); + exit(-1); + } - xranlib_compress(&bfp_com_req, &bfp_com_rsp); - payload_len = bfp_com_rsp.len; + if(num_sections != 1) + src += prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; - } else { - printf ("p_prbMapElm->compMethod == %d is not supported\n", - p_prbMapElm->compMethod); - exit(-1); - } + /* update RB map for given element */ + //p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len += payload_len; - if(num_sections != 1) - src += prb_per_section*N_SC_PER_PRB*4L; + /* add headroom for ORAN headers between IQs for chunk of RBs*/ + dst += payload_len; + if(idx+1 == num_sections) /* Create space for (eth + eCPRI + radio app + section + comp) headers required by next prbElement */ + { + dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); + } + else + { + /* Create space for section/compression header in current prbElement */ + //TODO: Check if alignment required for this case + dst += sizeof(struct data_section_hdr); + p_sec_desc->iq_buffer_len += sizeof(struct data_section_hdr); - /* update RB map for given element */ - //p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); - p_sec_desc->iq_buffer_len += payload_len; + comp_method = ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); - /* add headroom for ORAN headers between IQs for chunk of RBs*/ - dst += payload_len; - if(idx+1 == num_sections) /* Create space for (eth + eCPRI + radio app + section + comp) headers required by next prbElement */ - { - dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); + if( comp_method != XRAN_COMPMETHOD_NONE) + { + dst += sizeof (struct data_section_compression_hdr); + p_sec_desc->iq_buffer_len += sizeof(struct data_section_compression_hdr); + } + } + } /*for num_section */ + } /* for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) */ + } /* if(ptr && pos) */ + else { + rte_panic("ptr ==NULL\n"); + } + } /* if (pXranConf != NULL) */ + + return 0; +} + +int32_t +app_io_xran_iq_content_init_multi_section_up_tx(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu, uint16_t mtu) +{ + char *pos = NULL; + void *ptr = NULL; + uint8_t* u8dptr = NULL; + struct xran_prb_map* pRbMap = NULL; + enum xran_comp_hdr_type staticEn = XRAN_COMP_HDR_TYPE_DYNAMIC; + + bool isNb375=false; + if (pXranConf != NULL) + { + if(APP_O_RU == appMode && mu == XRAN_NBIOT_MU && XRAN_NBIOT_UL_SCS_3_75 ==pXranConf->perMu[mu].nbIotUlScs) + { + isNb375=true; } + + int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; + int32_t tti_src = target_tti % p_iq->numSlots; + int32_t tx_play_buffer_position; + + tx_play_buffer_position = tti_src * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit) + + (sym_id * pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit); + staticEn = pXranConf->ru_conf.xranCompHdrType; + + + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; + pos = ((char*)p_iq->buff_perMu[mu].p_tx_play_buffer[flowId]) + tx_play_buffer_position; + ptr = psIoCtrl->io_buff_perMu[mu].sFrontHaulTxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; + + if(ptr && pos) { + int32_t idxElm = 0; + u8dptr = (uint8_t*)ptr; + int16_t payload_len = 0; + int16_t pkg_len_temp = 0; + int16_t pkg_header_len = 0; + int16_t pkg_len = 0; + int16_t iq_buffer_len = 0; + + + uint8_t *dst = (uint8_t *)u8dptr; + uint8_t *src = (uint8_t *)pos; + uint16_t num_sections, idx, comp_method; + uint16_t prb_per_section; + struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm]; + struct xran_prb_elm* p_prev_prbElm; + dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); + + for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + struct xran_section_desc *p_sec_desc = NULL; + p_prbMapElm = &pRbMap->prbMap[idxElm]; + p_sec_desc = &p_prbMapElm->sec_desc[sym_id]; + /*Same set of IQ data (one UP packet) for overlapping PRBs with different set of reMasks*/ + if(p_prbMapElm->reMask && idxElm > 0){ + p_prev_prbElm = &pRbMap->prbMap[idxElm-1]; + if(p_prbMapElm->UP_nRBStart == p_prev_prbElm->UP_nRBStart && p_prbMapElm->UP_nRBSize == p_prev_prbElm->UP_nRBSize && \ + p_prbMapElm->nStartSymb == p_prev_prbElm->nStartSymb && p_prbMapElm->numSymb == p_prev_prbElm->numSymb) + continue; + } + + if(p_prbMapElm->bf_weight.extType == 1) + { + num_sections = p_prbMapElm->bf_weight.numSetBFWs; + prb_per_section = p_prbMapElm->bf_weight.numBundPrb; + } else { - /* Create space for section/compression header in current prbElement */ - //TODO: Check if alignment required for this case - dst += sizeof(struct data_section_hdr); - p_sec_desc->iq_buffer_len += sizeof(struct data_section_hdr); + num_sections = 1; + prb_per_section = p_prbMapElm->UP_nRBSize; + } - comp_method = ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + if(p_sec_desc == NULL) { + rte_panic ("p_sec_desc == NULL\n"); + } + + /* skip, if not scheduled */ + if(sym_id < p_prbMapElm->nStartSymb || sym_id >= p_prbMapElm->nStartSymb + p_prbMapElm->numSymb){ + p_sec_desc->iq_buffer_offset = 0; + p_sec_desc->iq_buffer_len = 0; + continue; + } + if (1) + { + pkg_header_len = sizeof(struct rte_ether_hdr) + + sizeof (struct xran_ecpri_hdr) + + sizeof (struct radio_app_common_hdr); + comp_method = ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + pkg_len_temp = sizeof (struct data_section_hdr)*(num_sections); if( comp_method != XRAN_COMPMETHOD_NONE) { - dst += sizeof (struct data_section_compression_hdr); - p_sec_desc->iq_buffer_len += sizeof(struct data_section_compression_hdr); - } - } + pkg_len_temp += sizeof (struct data_section_compression_hdr)*(num_sections); + pkg_len_temp += (p_prbMapElm->iqWidth*3)*p_prbMapElm->UP_nRBSize; + if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) pkg_len_temp += p_prbMapElm->UP_nRBSize; + } + if (pkg_len == 0) + { + //first new pkg + pkg_len = pkg_header_len + pkg_len_temp; + iq_buffer_len = 0; + p_sec_desc->section_pos = 1; + } + else if (pkg_len + pkg_len_temp > mtu) + { + //new pkg + dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); + pkg_len = pkg_header_len + pkg_len_temp; + iq_buffer_len = 0; + p_sec_desc->section_pos = 1; + } + else //if (pkg_len + pkg_len_temp <= mtu) + { + //appand pkg + /* Create space for section/compression header in current prbElement */ + dst += sizeof(struct data_section_hdr); + iq_buffer_len += sizeof(struct data_section_hdr); + + comp_method = ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + + if( comp_method != XRAN_COMPMETHOD_NONE) + { + dst += sizeof (struct data_section_compression_hdr); + iq_buffer_len += sizeof(struct data_section_compression_hdr); + } + pkg_len += pkg_len_temp; + p_sec_desc->section_pos = 2; + } + } + + src = (uint8_t *)(pos + p_prbMapElm->UP_nRBStart*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit); + p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len = iq_buffer_len; + + + for(idx=0; idx < num_sections ; idx++) + { + //printf("\nidx %hu u8dptr %p dst %p",idx,u8dptr,dst); + if((idx+1)*prb_per_section > p_prbMapElm->UP_nRBSize){ + prb_per_section = (p_prbMapElm->UP_nRBSize - idx*prb_per_section); + } + + if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { + payload_len = prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; + memcpy(dst, src, payload_len); + } else if ((p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) || (p_prbMapElm->compMethod == XRAN_COMPMETHOD_MODULATION)) { + struct xranlib_compress_request bfp_com_req; + struct xranlib_compress_response bfp_com_rsp; + + memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request)); + memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response)); + + bfp_com_req.data_in = (int16_t*)src; + bfp_com_req.numRBs = prb_per_section; + bfp_com_req.len = prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; + bfp_com_req.compMethod = p_prbMapElm->compMethod; + bfp_com_req.iqWidth = p_prbMapElm->iqWidth; + bfp_com_req.ScaleFactor= p_prbMapElm->ScaleFactor; + bfp_com_req.reMask = p_prbMapElm->reMask; + + bfp_com_rsp.data_out = (int8_t*)dst; + bfp_com_rsp.len = 0; + + xranlib_compress(&bfp_com_req, &bfp_com_rsp); + payload_len = bfp_com_rsp.len; + + } else { + printf ("p_prbMapElm->compMethod == %d is not supported\n", + p_prbMapElm->compMethod); + exit(-1); + } + + if(num_sections != 1) + src += prb_per_section*N_SC_PER_PRB(isNb375)*2L*p_iq->iq_dl_bit; + + /* update RB map for given element */ + //p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len += payload_len; + + /* add headroom for ORAN headers between IQs for chunk of RBs*/ + dst += payload_len; + if(idx+1 == num_sections) /* Create space for (eth + eCPRI + radio app + section + comp) headers required by next prbElement */ + { + //dst = xran_add_hdr_offset(dst, ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE)); + } + else + { + /* Create space for section/compression header in current prbElement */ + //TODO: Check if alignment required for this case + dst += sizeof(struct data_section_hdr); + p_sec_desc->iq_buffer_len += sizeof(struct data_section_hdr); + + comp_method = ((staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + + if( comp_method != XRAN_COMPMETHOD_NONE) + { + dst += sizeof (struct data_section_compression_hdr); + p_sec_desc->iq_buffer_len += sizeof(struct data_section_compression_hdr); + } + } } /*for num_section */ + iq_buffer_len = p_sec_desc->iq_buffer_len; } /* for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) */ } /* if(ptr && pos) */ else { - rte_panic("ptr ==NULL\n"); - } + rte_panic("ptr ==NULL\n"); + } } /* if (pXranConf != NULL) */ + return 0; } + int32_t app_io_xran_iq_content_init_up_prach(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu) { char *pos = NULL; void *ptr = NULL; uint32_t* u32dptr = NULL; + int32_t tti_dst = tti % XRAN_N_FE_BUF_LEN; - if(p_iq->p_tx_prach_play_buffer[flowId]) { - pos = ((char*)p_iq->p_tx_prach_play_buffer[flowId]); - ptr = psIoCtrl->sFHPrachRxBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; + if(p_iq->buff_perMu[mu].p_tx_prach_play_buffer[flowId]) { + pos = ((char*)p_iq->buff_perMu[mu].p_tx_prach_play_buffer[flowId]); + ptr = psIoCtrl->io_buff_perMu[mu].sFHPrachRxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; if(ptr && pos) { int32_t compMethod = pXranConf->ru_conf.compMeth_PRACH; if(compMethod == XRAN_COMPMETHOD_NONE) { u32dptr = (uint32_t*)(ptr); - memcpy(u32dptr, pos, RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[flowId])); + memcpy(u32dptr, pos, RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->buff_perMu[mu].tx_prach_play_buffer_size[flowId])); } else if((compMethod == XRAN_COMPMETHOD_BLKFLOAT) || (compMethod == XRAN_COMPMETHOD_MODULATION)) { struct xranlib_compress_request comp_req; @@ -1431,7 +1909,7 @@ app_io_xran_iq_content_init_up_prach(uint8_t appMode, struct xran_fh_config *p /* compress whole playback data */ comp_req.data_in = (int16_t *)pos; - comp_req.len = RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[flowId]); + comp_req.len = RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->buff_perMu[mu].tx_prach_play_buffer_size[flowId]); comp_req.numRBs = comp_req.len / 12 / 4; /* 12RE, 4bytes */ comp_req.compMethod = compMethod; comp_req.iqWidth = pXranConf->ru_conf.iqWidth_PRACH; @@ -1458,23 +1936,27 @@ app_io_xran_iq_content_init_up_prach(uint8_t appMode, struct xran_fh_config *p int32_t app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu) { struct xran_prb_map * pRbMap = NULL; char *pos = NULL; void *ptr = NULL; uint8_t* u8dptr = NULL; enum xran_comp_hdr_type staticEn = XRAN_COMP_HDR_TYPE_DYNAMIC; + int32_t tti_dst = tti % XRAN_N_FE_BUF_LEN; + int32_t tti_src = tti % p_iq->numSlots; if (pXranConf != NULL) { + staticEn = pXranConf->ru_conf.xranCompHdrType; + int32_t tx_play_buffer_position = tti_src * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(false)*4) + (sym_id * pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(false)*4); - if(p_iq->p_tx_srs_play_buffer[flowId]) { - pos = ((char*)p_iq->p_tx_srs_play_buffer[flowId]) + p_iq->tx_srs_play_buffer_position[flowId];; - ptr = psIoCtrl->sFHSrsRxBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers->pData; + if(p_iq->buff_perMu[mu].p_tx_srs_play_buffer[flowId]) { + pos = ((char*)p_iq->buff_perMu[mu].p_tx_srs_play_buffer[flowId]) + tx_play_buffer_position; + ptr = psIoCtrl->io_buff_perMu[mu].sFHSrsRxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; if(ptr && pos && pRbMap) { int32_t idxElm = 0; @@ -1488,7 +1970,7 @@ app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXr for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { struct xran_section_desc *p_sec_desc = NULL; p_prbMapElm = &pRbMap->prbMap[idxElm]; - p_sec_desc = &p_prbMapElm->sec_desc[sym_id][0]; + p_sec_desc = &p_prbMapElm->sec_desc[sym_id]; if(p_sec_desc == NULL){ rte_panic ("p_sec_desc == NULL\n"); @@ -1501,10 +1983,10 @@ app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXr continue; } - src = (uint8_t *)(pos + p_prbMapElm->UP_nRBStart*N_SC_PER_PRB*4L); + src = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB(false)*4L); if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { - payload_len = p_prbMapElm->UP_nRBSize*N_SC_PER_PRB*4L; + payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB(false)*4L; memcpy(dst, src, payload_len); } else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT @@ -1517,7 +1999,7 @@ app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXr bfp_com_req.data_in = (int16_t*)src; bfp_com_req.numRBs = p_prbMapElm->UP_nRBSize; - bfp_com_req.len = p_prbMapElm->UP_nRBSize*N_SC_PER_PRB*4L; + bfp_com_req.len = p_prbMapElm->UP_nRBSize*N_SC_PER_PRB(false)*4L; bfp_com_req.compMethod = p_prbMapElm->compMethod; bfp_com_req.iqWidth = p_prbMapElm->iqWidth; bfp_com_req.ScaleFactor= p_prbMapElm->ScaleFactor; @@ -1541,18 +2023,115 @@ app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXr dst = xran_add_hdr_offset(dst, (staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); } } else { - rte_panic("[%d %d %d] %p %p %p ==NULL\n",tti, ant_id, sym_id, ptr, pos, pRbMap); + rte_panic("[%d %d %d] %p %p %p ==NULL\n",tti_dst, ant_id, sym_id, ptr, pos, pRbMap); } - p_iq->tx_srs_play_buffer_position[flowId] += pXranConf->nULRBs*N_SC_PER_PRB*4; - if(p_iq->tx_srs_play_buffer_position[flowId] >= p_iq->tx_srs_play_buffer_size[flowId]) - p_iq->tx_srs_play_buffer_position[flowId] = 0; + p_iq->buff_perMu[mu].tx_srs_play_buffer_position[flowId] += pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(false)*4; + if(p_iq->buff_perMu[mu].tx_srs_play_buffer_position[flowId] >= p_iq->buff_perMu[mu].tx_srs_play_buffer_size[flowId]) + p_iq->buff_perMu[mu].tx_srs_play_buffer_position[flowId] = 0; } } return 0; } + + +int32_t +app_io_xran_iq_content_init_up_csirs(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) +{ + struct xran_prb_map * pRbMap = NULL; + char *pos = NULL; + void *ptr = NULL; + uint8_t* u8dptr = NULL; + enum xran_comp_hdr_type staticEn = XRAN_COMP_HDR_TYPE_DYNAMIC; + int32_t tti_dst = target_tti % XRAN_N_FE_BUF_LEN; + int32_t tti_src = target_tti % p_iq->numSlots; + int32_t tx_play_buffer_position; + + if (pXranConf != NULL) + { + tx_play_buffer_position = tti_src * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(false)*4) + (sym_id * pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(false)*4); + staticEn = pXranConf->ru_conf.xranCompHdrType; + if(p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[flowId]) { + pos = ((char*)p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[flowId]) + tx_play_buffer_position; + ptr = psIoCtrl->io_buff_perMu[mu].sFHCsirsTxBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[tti_dst][cc_id][ant_id].sBufferList.pBuffers->pData; + + if(ptr && pos && pRbMap) { + int32_t idxElm = 0; + u8dptr = (uint8_t*)ptr; + int16_t payload_len = 0; + + uint8_t *dst = (uint8_t *)u8dptr; + uint8_t *src = (uint8_t *)pos; + struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm]; + dst = xran_add_hdr_offset(dst, (staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + struct xran_section_desc *p_sec_desc = NULL; + p_prbMapElm = &pRbMap->prbMap[idxElm]; + p_sec_desc = &p_prbMapElm->sec_desc[sym_id]; + + if(p_sec_desc == NULL){ + rte_panic ("p_sec_desc == NULL\n"); + } + + /* skip, if not scheduled */ + if(sym_id < p_prbMapElm->nStartSymb || sym_id >= p_prbMapElm->nStartSymb + p_prbMapElm->numSymb) { + p_sec_desc->iq_buffer_offset = 0; + p_sec_desc->iq_buffer_len = 0; + continue; + } + + src = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB(false)*4L); + + if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { + payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB(false)*4L; + memcpy(dst, src, payload_len); + + } else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT + || (p_prbMapElm->compMethod == XRAN_COMPMETHOD_MODULATION)) { + struct xranlib_compress_request bfp_com_req; + struct xranlib_compress_response bfp_com_rsp; + + memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request)); + memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response)); + + bfp_com_req.data_in = (int16_t*)src; + bfp_com_req.numRBs = p_prbMapElm->UP_nRBSize; + bfp_com_req.len = p_prbMapElm->UP_nRBSize*N_SC_PER_PRB(false)*4L; + bfp_com_req.compMethod = p_prbMapElm->compMethod; + bfp_com_req.iqWidth = p_prbMapElm->iqWidth; + bfp_com_req.ScaleFactor= p_prbMapElm->ScaleFactor; + bfp_com_req.reMask = p_prbMapElm->reMask; + + bfp_com_rsp.data_out = (int8_t*)dst; + bfp_com_rsp.len = 0; + + xranlib_compress(&bfp_com_req, &bfp_com_rsp); + payload_len = bfp_com_rsp.len; + } else { + rte_panic ("p_prbMapElm->compMethod == %d is not supported\n", p_prbMapElm->compMethod); + } + + /* update RB map for given element */ + p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len = payload_len; + + /* add headroom for ORAN headers between IQs for chunk of RBs*/ + dst += payload_len; + dst = xran_add_hdr_offset(dst, (staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC) ? p_prbMapElm->compMethod : XRAN_COMPMETHOD_NONE); + } + } else { + rte_panic("[%d %d %d] %p %p %p ==NULL\n",tti_dst, ant_id, sym_id, ptr, pos, pRbMap); + } + } + } + return 0; +} + int32_t app_io_xran_iq_content_init(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) { @@ -1563,13 +2142,7 @@ app_io_xran_iq_content_init(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) int32_t nSectorIndex[XRAN_MAX_SECTOR_NR]; int32_t nSectorNum; int32_t cc_id, ant_id, sym_id, tti; - int32_t flowId; - - //uint8_t frame_id = 0; - //uint8_t subframe_id = 0; - //uint8_t slot_id = 0; - //uint8_t sym = 0; - + int32_t flowId, mu_idx; struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; //struct xran_fh_init *pXranInit = &app_io_xran_fh_init; struct o_xu_buffers * p_iq = NULL; @@ -1597,76 +2170,106 @@ app_io_xran_iq_content_init(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) } else { rte_panic("Error p_o_xu_cfg->p_buff\n"); } - + if (p_o_xu_cfg->nPuschUpMultiSectonSend) + { + printf("p_o_xu_cfg->mtu = %d\n",p_o_xu_cfg->mtu); + } /* Init Memory */ - for(cc_id = 0; cc_id < nSectorNum; cc_id++) { - for(tti = 0; tti < XRAN_N_FE_BUF_LEN; tti ++) { - for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++){ - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if(p_o_xu_cfg->appMode == APP_O_DU) { - flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; - } else { - flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; - } + for(mu_idx = 0; mu_idx < p_o_xu_cfg->numMu; mu_idx++) { + uint8_t mu = p_o_xu_cfg->mu_number[mu_idx]; + for(cc_id = 0; cc_id < nSectorNum; cc_id++) { + for(tti = 0; tti < XRAN_N_FE_BUF_LEN; tti ++) { + for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++){ + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(p_o_xu_cfg->appMode == APP_O_DU) { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + } else { + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + } - if ((status = app_io_xran_iq_content_init_cp_tx(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_cp_tx"); - } - if ((status = app_io_xran_iq_content_init_up_tx(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_up_tx"); - } - if ((status = app_io_xran_iq_content_init_cp_rx(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_cp_rx"); - } + if ((status = app_io_xran_iq_content_init_dl_cp(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_dl_cp"); + } + if (p_o_xu_cfg->nPuschUpMultiSectonSend) + { + if ((status = app_io_xran_iq_content_init_multi_section_up_tx(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu, p_o_xu_cfg->mtu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_tx"); + } + } + else + { + if ((status = app_io_xran_iq_content_init_up_tx(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_tx"); + } + } + if ((status = app_io_xran_iq_content_init_ul_cp(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_ul_cp"); + } + } } - } - /* prach TX for RU only */ - if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enablePrach) { - for(ant_id = 0; ant_id < xran_max_antenna_nr_prach; ant_id++) { + /* prach TX for RU only */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->perMu[mu].prachEnable) { + for(ant_id = 0; ant_id < xran_max_antenna_nr_prach; ant_id++) { + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + flowId = xran_max_antenna_nr_prach * cc_id + ant_id; + if ((status = app_io_xran_iq_content_init_up_prach(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_prach"); + } + } + } + #if 0 for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - flowId = xran_max_antenna_nr_prach * cc_id + ant_id; - if ((status = app_io_xran_iq_content_init_up_prach(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_up_prach"); + char fname[32]; + snprintf(fname, sizeof(fname), "./logs/aftercomp-%d.bin", sym_id); + sys_save_buf_to_file(fname, + "Compressed PRACH IQ Samples in binary format", + psIoCtrl->sFHPrachRxBbuIoBufCtrl[0][0][0].sBufferList.pBuffers[sym_id].pData, + RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[0]), + 1); + snprintf(fname, sizeof(fname), "./logs/aftercomp-%d.txt", sym_id); + sys_save_buf_to_file_txt(fname, + "Compressed PRACH IQ Samples in human readable format", + psIoCtrl->sFHPrachRxBbuIoBufCtrl[0][0][0].sBufferList.pBuffers[sym_id].pData, + RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[0]), + 1); + } + #endif + } + /* SRS TX for RU only */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs) { + for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { + for(sym_id = 0; sym_id < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; sym_id++) { + flowId = p_o_xu_cfg->antElmTRx*cc_id + ant_id; + if ((status = app_io_xran_iq_content_init_up_srs(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0){ + rte_panic("app_io_xran_iq_content_init_up_srs"); + } } } } - #if 0 - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - char fname[32]; - snprintf(fname, sizeof(fname), "./logs/aftercomp-%d.bin", sym_id); - sys_save_buf_to_file(fname, - "Compressed PRACH IQ Samples in binary format", - psIoCtrl->sFHPrachRxBbuIoBufCtrl[0][0][0].sBufferList.pBuffers[sym_id].pData, - RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[0]), - 1); - snprintf(fname, sizeof(fname), "./logs/aftercomp-%d.txt", sym_id); - sys_save_buf_to_file_txt(fname, - "Compressed PRACH IQ Samples in human readable format", - psIoCtrl->sFHPrachRxBbuIoBufCtrl[0][0][0].sBufferList.pBuffers[sym_id].pData, - RTE_MIN(PRACH_PLAYBACK_BUFFER_BYTES, p_iq->tx_prach_play_buffer_size[0]), - 1); - } - #endif - } - /* SRS TX for RU only */ - if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs) { - for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { - for(sym_id = 0; sym_id < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; sym_id++) { - flowId = p_o_xu_cfg->antElmTRx*cc_id + ant_id; - if ((status = app_io_xran_iq_content_init_up_srs(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0){ - rte_panic("app_io_xran_iq_content_init_up_srs"); + /* CSI-RS TX packets for DU only */ + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->csirsEnable) { + for(ant_id = 0; ant_id < p_o_xu_cfg->nCsiPorts; ant_id++) { + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + flowId = p_o_xu_cfg->nCsiPorts*cc_id + ant_id; + if ((status = app_io_xran_iq_content_init_up_csirs(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0){ + rte_panic("app_io_xran_iq_content_init_up_csirs"); + } } } } @@ -1677,24 +2280,28 @@ app_io_xran_iq_content_init(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) return 0; } -void app_io_xran_if_stop(void) + +void app_io_xran_if_stop(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg __attribute__((unused))) { - xran_status_t status = 0; + printf("Stopping.... %d\n", o_xu_id); +} - status += xran_mm_destroy(app_io_xran_handle)*2; +void app_io_xran_if_close(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) +{ + struct bbu_xran_io_if *psBbuIo = app_io_xran_if_get(); + int i; - if(XRAN_STATUS_SUCCESS != status) { - printf("Failed at xran_mm_destroy, status %d\n",status); - iAssert(status == XRAN_STATUS_SUCCESS); + for(i=0; i < p_o_xu_cfg->numCC; i++) + { + xran_bm_release(psBbuIo->nInstanceHandle[o_xu_id][i], NULL); } } int32_t app_io_xran_iq_content_get_up_prach(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { - xran_status_t status = 0; int32_t prach_len = 0; void *ptr = NULL; char *pos = NULL; @@ -1702,381 +2309,534 @@ app_io_xran_iq_content_get_up_prach(uint8_t appMode, struct xran_fh_config *pX int32_t tti_src = target_tti % XRAN_N_FE_BUF_LEN; int32_t tti_dst = target_tti % p_iq->numSlots; int32_t prach_log_buffer_position; + struct xran_prb_map *pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHPrachRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData;; + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + int32_t i, npkt = pFrontHaulRxPacketCtrl->nRxPkt; + int16_t iqWidth = pXranConf->ru_conf.iqWidth_PRACH; - prach_len = (3 * pXranConf->ru_conf.iqWidth_PRACH) * pXranConf->prach_conf.numPrbc; /* 12RE*2pairs/8bits (12*2/8=3)*/ + prach_len = (3 * iqWidth) * pXranConf->perMu[mu].prach_conf.numPrbc; /* 12RE*2pairs/8bits (12*2/8=3)*/ prach_log_buffer_position = tti_dst * (XRAN_NUM_OF_SYMBOL_PER_SLOT*prach_len) + (sym_id * prach_len); - if(p_iq->p_prach_log_buffer[flowId]) { - pos = ((char*)p_iq->p_prach_log_buffer[flowId]) + prach_log_buffer_position; - ptr = psIoCtrl->sFHPrachRxBbuIoBufCtrlDecomp[tti_src][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; - if(ptr) { - int32_t compMethod = pXranConf->ru_conf.compMeth_PRACH; - if(compMethod == XRAN_COMPMETHOD_NONE) { - memcpy(pos, (uint32_t *)(ptr), prach_len); - } else { - struct xranlib_decompress_request decomp_req; - struct xranlib_decompress_response decomp_rsp; - int32_t parm_size; + if(p_iq->buff_perMu[mu].p_prach_log_buffer[flowId]) { + pos = ((char*)p_iq->buff_perMu[mu].p_prach_log_buffer[flowId]) + prach_log_buffer_position; + for (i = 0; i < npkt; i++) + { + uint16_t nRBStart = pFrontHaulRxPacketCtrl->nRBStart[i]; + uint16_t nRBSize = pFrontHaulRxPacketCtrl->nRBSize[i]; + + ptr = pFrontHaulRxPacketCtrl->pData[i]; + if(ptr) { + int32_t compMethod = pXranConf->ru_conf.compMeth_PRACH; + if(compMethod == XRAN_COMPMETHOD_NONE) { + memcpy(pos + nRBStart * N_SC_PER_PRB(false) * 2 * p_iq->iq_prach_bit, (uint32_t *)(ptr), nRBSize * N_SC_PER_PRB(false)*2*p_iq->iq_prach_bit); + } else { + struct xranlib_decompress_request decomp_req; + struct xranlib_decompress_response decomp_rsp; + int32_t parm_size; + + memset(&decomp_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&decomp_rsp, 0, sizeof(struct xranlib_decompress_response)); + + switch(compMethod) { + case XRAN_COMPMETHOD_BLKFLOAT: parm_size = 1; break; + case XRAN_COMPMETHOD_MODULATION: parm_size = 0; break; + default: + parm_size = 0; + } - memset(&decomp_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&decomp_rsp, 0, sizeof(struct xranlib_decompress_response)); + decomp_req.data_in = (int8_t *)ptr; + decomp_req.numRBs = pXranConf->perMu[mu].prach_conf.numPrbc; + decomp_req.len = (3 * iqWidth + parm_size) * pXranConf->perMu[mu].prach_conf.numPrbc; /* 12RE*2pairs/8bits (12*2/8=3)*/ + decomp_req.compMethod = compMethod; + decomp_req.iqWidth = iqWidth; + decomp_req.ScaleFactor = 0; /* TODO */ + decomp_req.reMask = 0xfff; /* TODO */ + decomp_req.SprEnable = 0; - switch(compMethod) { - case XRAN_COMPMETHOD_BLKFLOAT: parm_size = 1; break; - case XRAN_COMPMETHOD_MODULATION: parm_size = 0; break; - default: - parm_size = 0; + decomp_rsp.data_out = (int16_t *)(pos + nRBStart * N_SC_PER_PRB(false) * 2 * p_iq->iq_prach_bit); + decomp_rsp.len = 0; + + xranlib_decompress(&decomp_req, &decomp_rsp); } + } + } + } /* if(p_iq->p_prach_log_buffer[flowId]) */ + + return XRAN_STATUS_SUCCESS; +} + + +int32_t +app_io_xran_iq_content_get_up_csirs(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) +{ + int32_t i; + struct xran_prb_map *pRbMap = NULL; + void *ptr = NULL; + char *pos = NULL; - decomp_req.data_in = (int8_t *)ptr; - decomp_req.numRBs = pXranConf->prach_conf.numPrbc; - decomp_req.len = (3 * pXranConf->ru_conf.iqWidth_PRACH + parm_size) * pXranConf->prach_conf.numPrbc; /* 12RE*2pairs/8bits (12*2/8=3)*/ - decomp_req.compMethod = compMethod; - decomp_req.iqWidth = pXranConf->ru_conf.iqWidth_PRACH; - decomp_req.ScaleFactor = 0; /* TODO */ - decomp_req.reMask = 0xfff; /* TODO */ + int32_t tti_src = target_tti % XRAN_N_FE_BUF_LEN; + int32_t tti_dst = target_tti % p_iq->numSlots; + int32_t csirs_log_buffer_position; + int16_t compMethod = pXranConf->ru_conf.compMeth; + int16_t iqWidth = pXranConf->ru_conf.iqWidth; + int16_t nRBSize, nRBStart; - decomp_rsp.data_out = (int16_t *)pos; - decomp_rsp.len = 0; + csirs_log_buffer_position = tti_dst * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(false)*2*p_iq->iq_csirs_bit) + + (sym_id * pXranConf->perMu[mu].nDLRBs*N_SC_PER_PRB(false)*2*p_iq->iq_csirs_bit); - xranlib_decompress(&decomp_req, &decomp_rsp); + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHCsirsTxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; + if(pRbMap == NULL) { + rte_panic("pRbMap == NULL\n"); } - } - } /* if(p_iq->p_prach_log_buffer[flowId]) */ + if(p_iq->buff_perMu[mu].p_csirs_log_buffer[flowId]) { - return status; + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + int32_t npkts = RTE_MAX(pFrontHaulRxPacketCtrl->nRxPkt, psIoCtrl->io_buff_perMu[mu].nCSIRSRxPktBufCtrl[tti_src][cc_id][ant_id][sym_id]); + + pos = ((char*)p_iq->buff_perMu[mu].p_csirs_log_buffer[flowId]) + csirs_log_buffer_position; + + for (i = 0; i < npkts; i++) + { + ptr = pFrontHaulRxPacketCtrl->pData[i]; + nRBSize = pFrontHaulRxPacketCtrl->nRBSize[i]; + nRBStart = pFrontHaulRxPacketCtrl->nRBStart[i]; + if(ptr) { + if (compMethod != XRAN_COMPMETHOD_NONE) { + struct xranlib_decompress_request bfp_decom_req; + struct xranlib_decompress_response bfp_decom_rsp; + int32_t parm_size; + + memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); + switch(compMethod) { + case XRAN_COMPMETHOD_BLKFLOAT: + parm_size = 1; + break; + case XRAN_COMPMETHOD_MODULATION: + parm_size = 0; + break; + default: + parm_size = 0; + } + + bfp_decom_req.data_in = (int8_t *)ptr; + bfp_decom_req.numRBs = nRBSize; + bfp_decom_req.len = (3 * iqWidth + parm_size)* nRBSize; + bfp_decom_req.compMethod = compMethod; + bfp_decom_req.iqWidth = iqWidth; + bfp_decom_req.SprEnable = 0; + + bfp_decom_rsp.data_out = (int16_t *)(pos + nRBStart * N_SC_PER_PRB(false) * 2 * p_iq->iq_csirs_bit); + bfp_decom_rsp.len = 0; + + xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); + } + else { + memcpy(pos + nRBStart * N_SC_PER_PRB(false)*4 , ptr, nRBSize * N_SC_PER_PRB(false)*2*p_iq->iq_csirs_bit); + } + } + } } + return XRAN_STATUS_SUCCESS; +} + int32_t app_io_xran_iq_content_get_up_srs(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { - xran_status_t status = 0; - int32_t idxElm = 0; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; - struct xran_section_desc *p_sec_desc = NULL; + int32_t i; + struct xran_prb_map *pRbMap = NULL; - void *ptr = NULL; + uint8_t *ptr = NULL; char *pos = NULL; - uint32_t *u32dptr; int32_t tti_src = target_tti % XRAN_N_FE_BUF_LEN; int32_t tti_dst = target_tti % p_iq->numSlots; - int32_t srs_log_buffer_position = tti_dst * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->nULRBs*N_SC_PER_PRB*4) + (sym_id * pXranConf->nULRBs*N_SC_PER_PRB*4); + int32_t srs_log_buffer_position; + int16_t compMethod = pXranConf->ru_conf.compMeth; + int16_t iqWidth = pXranConf->ru_conf.iqWidth; + int16_t nRBSize, nRBStart; + + srs_log_buffer_position = tti_dst * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(false)*2*p_iq->iq_srs_bit) + + (sym_id * pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(false)*2*p_iq->iq_srs_bit); - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHSrsRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL){ + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHSrsRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; + if(pRbMap == NULL) { rte_panic("pRbMap == NULL\n"); - } + } - if(p_iq->p_srs_log_buffer[flowId]) { - pRbElm = &pRbMap->prbMap[0]; - /*if(pRbMap->nPrbElm == 1) { - if(sym_id >= pRbElm->nStartSymb && sym_id < pRbElm->nStartSymb + pRbElm->numSymb) { - pos = ((char*)p_iq->p_srs_log_buffer[flowId]) + p_iq->srs_log_buffer_position[flowId]; - ptr = psIoCtrl->sFHSrsRxBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers[sym_id].pData; - if(ptr){ - int32_t payload_len = 0; - u32dptr = (uint32_t*)(ptr); - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE){ - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - int32_t parm_size; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - switch(pRbElm->compMethod) { - case XRAN_COMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - case XRAN_COMPMETHOD_MODULATION: - parm_size = 0; - break; - default: - parm_size = 0; - } - - bfp_decom_req.data_in = (int8_t *)u32dptr; - bfp_decom_req.numRBs = pRbElm->nRBSize; - bfp_decom_req.len = (3 * pRbElm->iqWidth + parm_size) * pRbElm->nRBSize; - bfp_decom_req.compMethod = pRbElm->compMethod; - bfp_decom_req.iqWidth = pRbElm->iqWidth; - - bfp_decom_rsp.data_out = (int16_t *)(pos + pRbElm->nRBStart*N_SC_PER_PRB*4); - bfp_decom_rsp.len = 0; - - xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); - payload_len = bfp_decom_rsp.len; - - } else { - u32dptr = (uint32_t*)(ptr); - memcpy(pos + pRbElm->nRBStart*N_SC_PER_PRB*4L , u32dptr, pRbElm->nRBSize*N_SC_PER_PRB*4L); - } - }else { - printf("[%d][%d][%d][%d]ptr ==NULL\n",tti,cc_id,ant_id, sym_id); - } - } - } else*/ { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - p_sec_desc = &pRbElm->sec_desc[sym_id][0]; - if(p_iq->p_srs_log_buffer[flowId] && p_sec_desc) { - if(sym_id >= pRbElm->nStartSymb && sym_id < pRbElm->nStartSymb + pRbElm->numSymb){ - pos = ((char*)p_iq->p_srs_log_buffer[flowId]) + srs_log_buffer_position; - ptr = p_sec_desc->pData; - if(ptr){ - u32dptr = (uint32_t*)(ptr); - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE){ - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - int32_t parm_size; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - switch(pRbElm->compMethod) { - case XRAN_COMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - case XRAN_COMPMETHOD_MODULATION: - parm_size = 0; - break; - default: - parm_size = 0; - } - - bfp_decom_req.data_in = (int8_t *)u32dptr; - bfp_decom_req.numRBs = pRbElm->nRBSize; - bfp_decom_req.len = (3 * pRbElm->iqWidth + parm_size)*pRbElm->nRBSize; - bfp_decom_req.compMethod = pRbElm->compMethod; - bfp_decom_req.iqWidth = pRbElm->iqWidth; - - bfp_decom_rsp.data_out = (int16_t *)(pos + pRbElm->nRBStart*N_SC_PER_PRB*4); - bfp_decom_rsp.len = 0; - - xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); - } else { - memcpy(pos + pRbElm->nRBStart*N_SC_PER_PRB*4 , u32dptr, pRbElm->nRBSize*N_SC_PER_PRB*4); - } - } - } - } else { - printf("(%d : %d : %d) flowid %d, p_sec_desc is empty\n", target_tti, sym_id, ant_id,flowId); - } - } - } + if(p_iq->buff_perMu[mu].p_srs_log_buffer[flowId]) { + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + int32_t npkts = RTE_MAX(pFrontHaulRxPacketCtrl->nRxPkt, psIoCtrl->io_buff_perMu[mu].nSRSRxPktBufCtrl[tti_src][cc_id][ant_id][sym_id]); + + pos = ((char*)p_iq->buff_perMu[mu].p_srs_log_buffer[flowId]) + srs_log_buffer_position; + + for (i = 0; i < npkts; i++) + { + ptr = pFrontHaulRxPacketCtrl->pData[i]; + nRBSize = pFrontHaulRxPacketCtrl->nRBSize[i]; + nRBStart = pFrontHaulRxPacketCtrl->nRBStart[i]; + if(ptr) { + if (compMethod != XRAN_COMPMETHOD_NONE) { + struct xranlib_decompress_request bfp_decom_req; + struct xranlib_decompress_response bfp_decom_rsp; + int32_t parm_size; + + memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); + switch(compMethod) { + case XRAN_COMPMETHOD_BLKFLOAT: + parm_size = 1; + break; + case XRAN_COMPMETHOD_MODULATION: + parm_size = 0; + break; + default: + parm_size = 0; } + + bfp_decom_req.data_in = (int8_t *)ptr; + bfp_decom_req.numRBs = nRBSize; + bfp_decom_req.len = (3 * iqWidth + parm_size)* nRBSize; + bfp_decom_req.compMethod = compMethod; + bfp_decom_req.iqWidth = iqWidth; + bfp_decom_req.SprEnable = 0; + + bfp_decom_rsp.data_out = (int16_t *)(pos + nRBStart * N_SC_PER_PRB(false) * 2 * p_iq->iq_srs_bit); + bfp_decom_rsp.len = 0; + + xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); + } + else { + memcpy(pos + nRBStart * N_SC_PER_PRB(false)*4 , ptr, nRBSize * N_SC_PER_PRB(false)* 2 * p_iq->iq_srs_bit); + } + } + } + } - return status; + return XRAN_STATUS_SUCCESS; } int32_t app_io_xran_iq_content_get_up_rx(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId) + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t target_tti, int32_t flowId, uint8_t mu) { - xran_status_t status = 0; - int32_t idxElm = 0; - int32_t idxSection = 0; + int32_t i; struct xran_prb_map *pRbMap = NULL; struct xran_prb_elm *pRbElm = NULL; - struct xran_prb_elm *pRbElmRx = NULL; - struct xran_section_desc *p_sec_desc = NULL; - uint16_t idxDesc = 0; - - void *ptr = NULL; char *pos = NULL; uint32_t *u32dptr; - struct data_section_hdr* data_hdr; - uint16_t num_prbu = 0, start_prbu = 0, prb_idx; + uint16_t num_prbu = 0, start_prbu = 0, sect_id; char *src; - const int16_t data_size = sizeof(struct data_section_hdr); - const int16_t compr_size = sizeof(struct data_section_compression_hdr); + + bool isNb375=false; + if(APP_O_DU == appMode && mu == XRAN_NBIOT_MU && XRAN_NBIOT_UL_SCS_3_75 ==pXranConf->perMu[mu].nbIotUlScs) + { + isNb375=true; + } int32_t tti_src = target_tti % XRAN_N_FE_BUF_LEN; int32_t tti_dst = target_tti % p_iq->numSlots; - int32_t rx_log_buffer_position = tti_dst * (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->nULRBs*N_SC_PER_PRB*4) + (sym_id * pXranConf->nULRBs*N_SC_PER_PRB*4); + int32_t rx_log_buffer_position; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFrontHaulRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; + rx_log_buffer_position = tti_dst * + (XRAN_NUM_OF_SYMBOL_PER_SLOT*pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(isNb375)*2*p_iq->iq_ul_bit) + + (sym_id * pXranConf->perMu[mu].nULRBs*N_SC_PER_PRB(isNb375)*2*p_iq->iq_ul_bit); + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFrontHaulRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; if(pRbMap == NULL) { printf("pRbMap == NULL\n"); exit(-1); } - if(0 == pXranConf->RunSlotPrbMapBySymbolEnable) + if (p_iq->buff_perMu[mu].p_rx_log_buffer[flowId]) { - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - for (idxDesc = 0; idxDesc < XRAN_MAX_FRAGMENT; idxDesc++) { - p_sec_desc = &pRbElm->sec_desc[sym_id][idxDesc]; - if(p_iq->p_rx_log_buffer[flowId] && p_sec_desc){ - if(sym_id >= pRbElm->nStartSymb && sym_id < pRbElm->nStartSymb + pRbElm->numSymb){ - if (!p_sec_desc->pCtrl) - continue; - pos = ((char*)p_iq->p_rx_log_buffer[flowId]) + rx_log_buffer_position; - ptr = p_sec_desc->pData; - src = (char *)ptr; - data_hdr = (struct data_section_hdr *)src; - num_prbu = p_sec_desc->num_prbu; - start_prbu = p_sec_desc->start_prbu; - prb_idx = start_prbu; - while(prb_idx < (pRbElm->UP_nRBStart + pRbElm->UP_nRBSize) && num_prbu != 0){ - if(src){ - u32dptr = (uint32_t*)(src); - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE){ - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - int32_t parm_size = 0; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - switch(pRbElm->compMethod) { - case XRAN_COMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - case XRAN_COMPMETHOD_MODULATION: - parm_size = 0; - break; - default: - parm_size = 0; - } - - bfp_decom_req.data_in = (int8_t *)u32dptr; - bfp_decom_req.numRBs = num_prbu; - bfp_decom_req.len = (3 * pRbElm->iqWidth + parm_size)*num_prbu; - bfp_decom_req.compMethod = pRbElm->compMethod; - bfp_decom_req.iqWidth = pRbElm->iqWidth; - bfp_decom_req.reMask = pRbElm->reMask; - bfp_decom_req.ScaleFactor= pRbElm->ScaleFactor; - - bfp_decom_rsp.data_out = (int16_t *)(pos + start_prbu*N_SC_PER_PRB*4); - bfp_decom_rsp.len = 0; - - xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); - src += (3 * pRbElm->iqWidth + parm_size)*num_prbu; - - } else { - memcpy(pos + start_prbu*N_SC_PER_PRB*4 , u32dptr, num_prbu*N_SC_PER_PRB*4); - src += num_prbu*N_SC_PER_PRB*4; - } - } - else { - // printf("%s:%d [%d][%d][%d][%d]src ==NULL\n", __FUNCTION__, __LINE__, tti,cc_id,ant_id, sym_id); - } - data_hdr = (struct data_section_hdr *)src; - if(pRbElm->bf_weight.extType == 1 && data_hdr != NULL) - { - data_hdr->fields.all_bits = rte_be_to_cpu_32(data_hdr->fields.all_bits); - num_prbu = data_hdr->fields.num_prbu; - start_prbu = data_hdr->fields.start_prbu; - prb_idx += num_prbu; - src += data_size; - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE && pXranConf->ru_conf.xranCompHdrType == XRAN_COMP_HDR_TYPE_DYNAMIC) - src += compr_size; - } - else - break; + struct xran_rx_packet_ctl *pFrontHaulRxPacketCtrl = &pRbMap->sFrontHaulRxPacketCtrl[sym_id]; + int32_t npkts = RTE_MAX(pFrontHaulRxPacketCtrl->nRxPkt, psIoCtrl->io_buff_perMu[mu].nRxPktBufCtrl[tti_src][cc_id][ant_id][sym_id]); + pos = ((char*)p_iq->buff_perMu[mu].p_rx_log_buffer[flowId]) + rx_log_buffer_position; + for (i = 0; i < npkts; i++) + { + start_prbu = pFrontHaulRxPacketCtrl->nRBStart[i]; + num_prbu = pFrontHaulRxPacketCtrl->nRBSize[i]; + sect_id = pFrontHaulRxPacketCtrl->nSectid[i]; + src = (char *)pFrontHaulRxPacketCtrl->pData[i]; + pRbElm = &pRbMap->prbMap[sect_id]; + if(src && pRbElm) + { + u32dptr = (uint32_t*)(src); + if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE) + { + struct xranlib_decompress_request bfp_decom_req; + struct xranlib_decompress_response bfp_decom_rsp; + int32_t parm_size = 0; + + memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); + switch(pXranConf->ru_conf.compMeth) { + case XRAN_COMPMETHOD_BLKFLOAT: + parm_size = 1; + break; + case XRAN_COMPMETHOD_MODULATION: + parm_size = 0; + break; + default: + parm_size = 0; } + + bfp_decom_req.data_in = (int8_t *)u32dptr; + bfp_decom_req.numRBs = num_prbu; + bfp_decom_req.len = (3 * pRbElm->iqWidth + parm_size)*num_prbu; + bfp_decom_req.compMethod = pRbElm->compMethod; + bfp_decom_req.iqWidth = pRbElm->iqWidth; + bfp_decom_req.reMask = pRbElm->reMask; + bfp_decom_req.ScaleFactor= pRbElm->ScaleFactor; + bfp_decom_req.SprEnable = 0; + + bfp_decom_rsp.data_out = (int16_t *)(pos + start_prbu*N_SC_PER_PRB(isNb375)*2*p_iq->iq_ul_bit); + bfp_decom_rsp.len = 0; + + xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); + src += (3 * pRbElm->iqWidth + parm_size)*num_prbu; } - } else - printf("(%d : %d : %d) flowid %d, p_sec_desc is empty\n", target_tti, sym_id, ant_id,flowId); - } - } - } + { + memcpy(pos + start_prbu*N_SC_PER_PRB(isNb375)*2*p_iq->iq_ul_bit, u32dptr, + num_prbu*N_SC_PER_PRB(isNb375)*2*p_iq->iq_ul_bit); + } + } + } + } else { - for(idxSection = 0; idxSection < pRbMap->nPrbElm; idxSection++ ) { - pRbElmRx = &pRbMap->prbMap[idxSection]; - for (idxDesc = 0; idxDesc < XRAN_MAX_FRAGMENT; idxDesc++) { - p_sec_desc = &pRbElmRx->sec_desc[sym_id][idxDesc]; - if(p_iq->p_rx_log_buffer[flowId] && p_sec_desc){ - if(!p_sec_desc->pCtrl) - continue; - for(idxElm = idxSection; idxElm < pRbMap->nPrbElm; idxElm++ ) - { - pRbElm = &pRbMap->prbMap[idxElm]; - if(sym_id >= pRbElm->nStartSymb && sym_id < pRbElm->nStartSymb + pRbElm->numSymb) { - pos = ((char*)p_iq->p_rx_log_buffer[flowId]) + rx_log_buffer_position; - ptr = p_sec_desc->pData; - src = (char *)ptr; - data_hdr = (struct data_section_hdr *)src; - num_prbu = p_sec_desc->num_prbu; - start_prbu = p_sec_desc->start_prbu; - prb_idx = start_prbu; - while(prb_idx < (pRbElm->UP_nRBStart + pRbElm->UP_nRBSize) && num_prbu != 0){ - // while(prb_idx < (pRbElm->nRBStart + pRbElm->nRBSize) && num_prbu != 0){ - if(src){ - u32dptr = (uint32_t*)(src); - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE){ - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - int32_t parm_size = 0; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - switch(pRbElm->compMethod) { - case XRAN_COMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - case XRAN_COMPMETHOD_MODULATION: - parm_size = 0; - break; - default: - parm_size = 0; - } - - bfp_decom_req.data_in = (int8_t *)u32dptr; - bfp_decom_req.numRBs = num_prbu; - bfp_decom_req.len = (3 * pRbElm->iqWidth + parm_size)*num_prbu; - bfp_decom_req.compMethod = pRbElm->compMethod; - bfp_decom_req.iqWidth = pRbElm->iqWidth; - bfp_decom_req.reMask = pRbElm->reMask; - bfp_decom_req.ScaleFactor= pRbElm->ScaleFactor; - - bfp_decom_rsp.data_out = (int16_t *)(pos + start_prbu*N_SC_PER_PRB*4); - bfp_decom_rsp.len = 0; - - xranlib_decompress(&bfp_decom_req, &bfp_decom_rsp); - src += (3 * pRbElm->iqWidth + parm_size)*num_prbu; - - } else { - memcpy(pos + start_prbu*N_SC_PER_PRB*4 , u32dptr, num_prbu*N_SC_PER_PRB*4); - src += num_prbu*N_SC_PER_PRB*4; - } - } - else { - // printf("%s:%d [%d][%d][%d][%d]src ==NULL\n", __FUNCTION__, __LINE__, tti,cc_id,ant_id, sym_id); - } - data_hdr = (struct data_section_hdr *)src; - if(pRbElm->bf_weight.extType == 1 && data_hdr != NULL) - { - data_hdr->fields.all_bits = rte_be_to_cpu_32(data_hdr->fields.all_bits); - num_prbu = data_hdr->fields.num_prbu; - start_prbu = data_hdr->fields.start_prbu; - prb_idx += num_prbu; - src += data_size; - if (pRbElm->compMethod != XRAN_COMPMETHOD_NONE && pXranConf->ru_conf.xranCompHdrType == XRAN_COMP_HDR_TYPE_DYNAMIC) - src += compr_size; - } - else - break; - } - // break; + printf("invalid rx_log_buffer\n"); + exit(-1); + } + + return XRAN_STATUS_SUCCESS; +} + +/* CP - DL for O-RU only */ +int32_t app_io_xran_iq_content_get_cp_dl(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu) +{ + xran_status_t status = 0; + + uint16_t idxElm = 0; + int i = 0, len; + uint8_t *src_buf; + char *src = NULL; + struct xran_prb_map *pRbMap = NULL; + struct xran_prb_elm *pRbElm = NULL; + int8_t *iq_data = NULL; + uint16_t N = pXranConf->nAntElmTRx; + uint8_t parm_size; + int32_t tti_src = tti % XRAN_N_FE_BUF_LEN; + int32_t tti_dst = tti % p_iq->numSlots ; + int32_t tx_dl_bfw_buffer_position = tti_dst * (pXranConf->perMu[mu].nDLRBs*pXranConf->nAntElmTRx)*4; + uint16_t iq_size; + struct xran_cp_radioapp_section_ext1 * ext1; + uint8_t bfwIqWidth; + uint8_t total_ext1_len = 0; + char *pos = NULL; + + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHCpRxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; + if(pRbMap == NULL) { + printf("pRbMap == NULL\n"); + return XRAN_STATUS_FAIL; + } + pos = (char*)p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[flowId] + tx_dl_bfw_buffer_position; + for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { + pRbElm = &pRbMap->prbMap[idxElm]; + bfwIqWidth = pRbElm->bf_weight.bfwIqWidth; + if(p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[flowId]) { + src = (char *)pRbElm->bf_weight.p_ext_section; + if(!pRbElm->bf_weight.p_ext_start) + continue; + + for(i = 0; i < (pRbElm->bf_weight.numSetBFWs); i++) { + if(src){ + src_buf = (uint8_t *)src; + ext1 = (struct xran_cp_radioapp_section_ext1 *)src_buf; + src_buf += sizeof(struct xran_cp_radioapp_section_ext1); + + iq_data = (int8_t *)(src_buf); + total_ext1_len = ext1->extLen * XRAN_SECTIONEXT_ALIGN; + if (pRbElm->bf_weight.bfwCompMeth == XRAN_COMPMETHOD_NONE){ + iq_size = N * bfwIqWidth * 2; // total in bits + parm_size = iq_size>>3; // total in bytes (/8) + if(iq_size%8) parm_size++; // round up + len = parm_size; + memcpy(pos,iq_data,len); + } + else { + switch(pRbElm->bf_weight.bfwCompMeth) { + case XRAN_BFWCOMPMETHOD_BLKFLOAT: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_BLKSCALE: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_ULAW: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_BEAMSPACE: + parm_size = N>>3; if(N%8) parm_size++; parm_size *= 8; + break; + + default: + parm_size = 0; + } + len = parm_size; + /* Get BF weights */ + iq_size = N * bfwIqWidth * 2; // total in bits + parm_size = iq_size>>3; // total in bytes (/8) + if(iq_size%8) parm_size++; // round up + len += parm_size; + struct xranlib_decompress_request bfp_decom_req; + struct xranlib_decompress_response bfp_decom_rsp; + + memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); + + bfp_decom_req.data_in = (int8_t*)iq_data; + bfp_decom_req.numRBs = 1; + bfp_decom_req.numDataElements = N*2; + bfp_decom_req.len = len; + bfp_decom_req.compMethod = pRbElm->bf_weight.bfwCompMeth; + bfp_decom_req.iqWidth = bfwIqWidth; + + bfp_decom_rsp.data_out = (int16_t *)(pos); + bfp_decom_rsp.len = 0; + if (unlikely(status = xranlib_decompress_bfw(&bfp_decom_req, &bfp_decom_rsp) != XRAN_STATUS_SUCCESS)) { + return XRAN_STATUS_FAIL; } } + pos += N*4; } - else - printf("(%d : %d : %d) flowid %d, p_sec_desc is empty\n", target_tti, sym_id, ant_id,flowId); + src += (total_ext1_len + sizeof(struct xran_cp_radioapp_section1)); } } } - return status; + return XRAN_STATUS_SUCCESS; } +/* CP - UL for O-RU only */ +int32_t app_io_xran_iq_content_get_cp_ul(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu) +{ + xran_status_t status = 0; + uint16_t idxElm = 0; + int i = 0, len; + uint8_t *src_buf; + char *src = NULL; + struct xran_prb_map *pRbMap = NULL; + struct xran_prb_elm *pRbElm = NULL; + int8_t *iq_data = NULL; + uint16_t N = pXranConf->nAntElmTRx; + uint8_t parm_size; + uint16_t iq_size; + struct xran_cp_radioapp_section_ext1 * ext1; + uint8_t bfwIqWidth; + uint8_t total_ext1_len = 0; + int32_t tti_src = tti % XRAN_N_FE_BUF_LEN; + int32_t tti_dst = tti % p_iq->numSlots; + int32_t tx_ul_bfw_buffer_position = tti_dst * (pXranConf->perMu[mu].nULRBs*pXranConf->nAntElmTRx)*4; + char *pos = NULL; + + pRbMap = (struct xran_prb_map *) psIoCtrl->io_buff_perMu[mu].sFHCpTxPrbMapBbuIoBufCtrl[tti_src][cc_id][ant_id].sBufferList.pBuffers->pData; + if(pRbMap == NULL) { + printf("pRbMap == NULL\n"); + return XRAN_STATUS_FAIL; + } + pos = ((char*)p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[flowId]) + tx_ul_bfw_buffer_position; + for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { + pRbElm = &pRbMap->prbMap[idxElm]; + bfwIqWidth = pRbElm->bf_weight.bfwIqWidth; + if(p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[flowId]) { + src = (char *)pRbElm->bf_weight.p_ext_section; + if(!pRbElm->bf_weight.p_ext_start) + continue; + + for(i = 0; i < (pRbElm->bf_weight.numSetBFWs); i++) { + if(src){ + src_buf = (uint8_t *)src; + ext1 = (struct xran_cp_radioapp_section_ext1 *)src_buf; + src_buf += sizeof(struct xran_cp_radioapp_section_ext1); + + iq_data = (int8_t *)(src_buf); + total_ext1_len = ext1->extLen * XRAN_SECTIONEXT_ALIGN; + if (pRbElm->bf_weight.bfwCompMeth == XRAN_COMPMETHOD_NONE){ + iq_size = N * bfwIqWidth * 2; // total in bits + parm_size = iq_size>>3; // total in bytes (/8) + if(iq_size%8) parm_size++; // round up + len = parm_size; + memcpy(pos,iq_data,len); + } + else { + switch(pRbElm->bf_weight.bfwCompMeth) { + case XRAN_BFWCOMPMETHOD_BLKFLOAT: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_BLKSCALE: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_ULAW: + parm_size = 1; + break; + + case XRAN_BFWCOMPMETHOD_BEAMSPACE: + parm_size = N>>3; if(N%8) parm_size++; parm_size *= 8; + break; + + default: + parm_size = 0; + } + len = parm_size; + /* Get BF weights */ + iq_size = N * bfwIqWidth * 2; // total in bits + parm_size = iq_size>>3; // total in bytes (/8) + if(iq_size%8) parm_size++; // round up + len += parm_size; + struct xranlib_decompress_request bfp_decom_req; + struct xranlib_decompress_response bfp_decom_rsp; + + memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); + memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); + + bfp_decom_req.data_in = (int8_t*)iq_data; + bfp_decom_req.numRBs = 1; + bfp_decom_req.numDataElements = N*2; + bfp_decom_req.len = len; + bfp_decom_req.compMethod = pRbElm->bf_weight.bfwCompMeth; + bfp_decom_req.iqWidth = bfwIqWidth; + + bfp_decom_rsp.data_out = (int16_t *)(pos); + bfp_decom_rsp.len = 0; + if (unlikely(status = xranlib_decompress_bfw(&bfp_decom_req, &bfp_decom_rsp) != XRAN_STATUS_SUCCESS)) { + return XRAN_STATUS_FAIL; + } + pos += N*4; + } + src += (total_ext1_len + sizeof(struct xran_cp_radioapp_section1)); + } + } + } + } + return XRAN_STATUS_SUCCESS; +} int32_t app_io_xran_iq_content_get(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) @@ -2086,10 +2846,9 @@ app_io_xran_iq_content_get(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) xran_status_t status; int32_t nSectorIndex[XRAN_MAX_SECTOR_NR]; int32_t nSectorNum; - int32_t cc_id, ant_id, sym_id, tti; + int32_t cc_id, ant_id, sym_id, tti, mu_idx; int32_t flowId; struct xran_fh_config *pXranConf = &app_io_xran_fh_config[o_xu_id]; - char *pos = NULL; uint32_t xran_max_antenna_nr = RTE_MAX(p_o_xu_cfg->numAxc, p_o_xu_cfg->numUlAxc); uint32_t xran_max_ant_array_elm_nr = RTE_MAX(p_o_xu_cfg->antElmTRx, xran_max_antenna_nr); @@ -2105,275 +2864,111 @@ app_io_xran_iq_content_get(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg) for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++) { nSectorIndex[nSectorNum] = nSectorNum; - } + } nSectorNum = p_o_xu_cfg->numCC; - printf ("app_io_xran_iq_content_get\n"); + printf ("app_io_xran_iq_content_get:RU %d mu %d numMu %d\n", o_xu_id, p_o_xu_cfg->mu_number[0], p_o_xu_cfg->numMu); if(p_o_xu_cfg->p_buff) { p_iq = p_o_xu_cfg->p_buff; - }else { + } else { printf("Error p_o_xu_cfg->p_buff\n"); exit(-1); - } + } if(p_o_xu_cfg->p_buff) { p_iq = p_o_xu_cfg->p_buff; } else { rte_panic("Error p_o_xu_cfg->p_buff\n"); - } + } if(psBbuIo->bbu_offload == 0) { - for(cc_id = 0; cc_id appMode == APP_O_RU) - flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; - else - flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if ((status = app_io_xran_iq_content_get_up_rx(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_rx"); - } - } - if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enablePrach && (ant_id < xran_max_antenna_nr_prach)) { - flowId = xran_max_antenna_nr_prach * cc_id + ant_id; + for(mu_idx = 0; mu_idx < p_o_xu_cfg->numMu; mu_idx++){ + uint8_t mu = p_o_xu_cfg->mu_number[mu_idx]; + for(cc_id = 0; cc_id appMode == APP_O_RU) + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + else + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if ((status = app_io_xran_iq_content_get_up_prach(p_o_xu_cfg->appMode, pXranConf, + if ((status = app_io_xran_iq_content_get_up_rx(p_o_xu_cfg->appMode, pXranConf, psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_prach"); + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_rx"); } } - } - } /* for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) */ - - /* SRS RX for O-DU only */ - if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { - for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { - flowId = p_o_xu_cfg->antElmTRx*cc_id + ant_id; - for(sym_id = 0; sym_id < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; sym_id++) { - if ((status = app_io_xran_iq_content_get_up_srs(p_o_xu_cfg->appMode, pXranConf, - psBbuIo, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_srs"); + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->perMu[mu].prachEnable && (ant_id < xran_max_antenna_nr_prach)) { + flowId = xran_max_antenna_nr_prach * cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if ((status = app_io_xran_iq_content_get_up_prach(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_prach"); + } + } + } + } /* for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) */ + + /* SRS RX for O-DU only */ + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { + for(ant_id = 0; ant_id < xran_max_ant_array_elm_nr; ant_id++) { + flowId = p_o_xu_cfg->antElmTRx*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; sym_id++) { + if ((status = app_io_xran_iq_content_get_up_srs(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_srs"); + } } } } - } - /* CP - DL for O-RU only */ - if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == 1 && p_o_xu_cfg->extType == 1) { - for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { - uint16_t idxElm = 0; - int i = 0, len; - uint8_t *src_buf; - char *src = NULL; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; - int8_t *iq_data = NULL; - uint16_t N = pXranConf->nAntElmTRx; - uint8_t parm_size; - int32_t tti_dst = tti % p_iq->numSlots ; - int32_t tx_dl_bfw_buffer_position = tti_dst * (pXranConf->nDLRBs*pXranConf->nAntElmTRx)*4; - uint16_t iq_size; - struct xran_cp_radioapp_section_ext1 * ext1; - uint8_t bfwIqWidth; - uint8_t total_ext1_len = 0; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHCpRxPrbMapBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL) { - printf("pRbMap == NULL\n"); - exit(-1); - } - flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; - pos = (char*)p_iq->p_tx_dl_bfw_log_buffer[flowId] + tx_dl_bfw_buffer_position; - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - bfwIqWidth = pRbElm->bf_weight.bfwIqWidth; - if(p_iq->p_tx_dl_bfw_log_buffer[flowId]) { - src = (char *)pRbElm->bf_weight.p_ext_section; - if(!pRbElm->bf_weight.p_ext_start) - continue; - - for(i = 0; i < (pRbElm->bf_weight.numSetBFWs); i++) { - if(src){ - src_buf = (uint8_t *)src; - ext1 = (struct xran_cp_radioapp_section_ext1 *)src_buf; - src_buf += sizeof(struct xran_cp_radioapp_section_ext1); - if(src_buf == NULL) - break; - - iq_data = (int8_t *)(src_buf); - total_ext1_len = ext1->extLen * XRAN_SECTIONEXT_ALIGN; - if (pRbElm->bf_weight.bfwCompMeth == XRAN_COMPMETHOD_NONE){ - iq_size = N * bfwIqWidth * 2; // total in bits - parm_size = iq_size>>3; // total in bytes (/8) - if(iq_size%8) parm_size++; // round up - len = parm_size; - memcpy(pos,iq_data,len); - } - else { - switch(pRbElm->bf_weight.bfwCompMeth) { - case XRAN_BFWCOMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_BLKSCALE: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_ULAW: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_BEAMSPACE: - parm_size = N>>3; if(N%8) parm_size++; parm_size *= 8; - break; - - default: - parm_size = 0; - } - len = parm_size; - /* Get BF weights */ - iq_size = N * bfwIqWidth * 2; // total in bits - parm_size = iq_size>>3; // total in bytes (/8) - if(iq_size%8) parm_size++; // round up - len += parm_size; - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - - bfp_decom_req.data_in = (int8_t*)iq_data; - bfp_decom_req.numRBs = 1; - bfp_decom_req.numDataElements = N*2; - bfp_decom_req.len = len; - bfp_decom_req.compMethod = pRbElm->bf_weight.bfwCompMeth; - bfp_decom_req.iqWidth = bfwIqWidth; - - bfp_decom_rsp.data_out = (int16_t *)(pos); - bfp_decom_rsp.len = 0; - xranlib_decompress_bfw(&bfp_decom_req, &bfp_decom_rsp); - } - pos += N*4; - } - src += (total_ext1_len + sizeof(struct xran_cp_radioapp_section1)); - } - } + /* CSI-RS Rx at O-RU */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->csirsEnable) { + for(ant_id = 0; ant_id < p_o_xu_cfg->nCsiPorts; ant_id++) { + flowId = p_o_xu_cfg->nCsiPorts*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if ((status = app_io_xran_iq_content_get_up_csirs(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_csirs"); } - - } /* for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) */ - } /* if(p_o_xu_cfg->appMode == APP_O_RU) */ - - - /* CP - UL for O-RU only */ - if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == 1 && p_o_xu_cfg->extType == 1) { - for(ant_id = 0; ant_id < p_o_xu_cfg->numUlAxc; ant_id++) { - uint16_t idxElm = 0; - int i = 0, len; - uint8_t *src_buf; - char *src = NULL; - struct xran_prb_map *pRbMap = NULL; - struct xran_prb_elm *pRbElm = NULL; - int8_t *iq_data = NULL; - uint16_t N = pXranConf->nAntElmTRx; - uint8_t parm_size; - uint16_t iq_size; - struct xran_cp_radioapp_section_ext1 * ext1; - uint8_t bfwIqWidth; - uint8_t total_ext1_len = 0; - int32_t tti_dst = tti % p_iq->numSlots; - int32_t tx_ul_bfw_buffer_position = tti_dst * (pXranConf->nULRBs*pXranConf->nAntElmTRx)*4; - pRbMap = (struct xran_prb_map *) psIoCtrl->sFHCpTxPrbMapBbuIoBufCtrl[tti][cc_id][ant_id].sBufferList.pBuffers->pData; - if(pRbMap == NULL) { - printf("pRbMap == NULL\n"); - exit(-1); } - flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; - pos = ((char*)p_iq->p_tx_ul_bfw_log_buffer[flowId]) + tx_ul_bfw_buffer_position; - for(idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { - pRbElm = &pRbMap->prbMap[idxElm]; - bfwIqWidth = pRbElm->bf_weight.bfwIqWidth; - if(p_iq->p_tx_ul_bfw_log_buffer[flowId]) { - src = (char *)pRbElm->bf_weight.p_ext_section; - if(!pRbElm->bf_weight.p_ext_start) - continue; - - for(i = 0; i < (pRbElm->bf_weight.numSetBFWs); i++) { - if(src){ - src_buf = (uint8_t *)src; - ext1 = (struct xran_cp_radioapp_section_ext1 *)src_buf; - src_buf += sizeof(struct xran_cp_radioapp_section_ext1); - if(src_buf == NULL) - break; - - iq_data = (int8_t *)(src_buf); - total_ext1_len = ext1->extLen * XRAN_SECTIONEXT_ALIGN; - if (pRbElm->bf_weight.bfwCompMeth == XRAN_COMPMETHOD_NONE){ - iq_size = N * bfwIqWidth * 2; // total in bits - parm_size = iq_size>>3; // total in bytes (/8) - if(iq_size%8) parm_size++; // round up - len = parm_size; - memcpy(pos,iq_data,len); } - else { - switch(pRbElm->bf_weight.bfwCompMeth) { - case XRAN_BFWCOMPMETHOD_BLKFLOAT: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_BLKSCALE: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_ULAW: - parm_size = 1; - break; - - case XRAN_BFWCOMPMETHOD_BEAMSPACE: - parm_size = N>>3; if(N%8) parm_size++; parm_size *= 8; - break; - - default: - parm_size = 0; } - len = parm_size; - /* Get BF weights */ - iq_size = N * bfwIqWidth * 2; // total in bits - parm_size = iq_size>>3; // total in bytes (/8) - if(iq_size%8) parm_size++; // round up - len += parm_size; - struct xranlib_decompress_request bfp_decom_req; - struct xranlib_decompress_response bfp_decom_rsp; - - memset(&bfp_decom_req, 0, sizeof(struct xranlib_decompress_request)); - memset(&bfp_decom_rsp, 0, sizeof(struct xranlib_decompress_response)); - - bfp_decom_req.data_in = (int8_t*)iq_data; - bfp_decom_req.numRBs = 1; - bfp_decom_req.numDataElements = N*2; - bfp_decom_req.len = len; - bfp_decom_req.compMethod = pRbElm->bf_weight.bfwCompMeth; - bfp_decom_req.iqWidth = bfwIqWidth; - - bfp_decom_rsp.data_out = (int16_t *)(pos); - bfp_decom_rsp.len = 0; - xranlib_decompress_bfw(&bfp_decom_req, &bfp_decom_rsp); - } - pos += N*4; - } - src += (total_ext1_len + sizeof(struct xran_cp_radioapp_section1)); - } - } - } - } /* for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) */ - } /* if(p_o_xu_cfg->appMode == APP_O_RU) */ - } /*for(tti = 0; tti < XRAN_N_FE_BUF_LEN; tti++)*/ - } /*for(cc_id = 0; cc_id appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + for(ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++) { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + if ((status = app_io_xran_iq_content_get_cp_dl(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_cp_dl"); + } + } + } + + /* CP - UL for O-RU only */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + for(ant_id = 0; ant_id < p_o_xu_cfg->numUlAxc; ant_id++) { + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + if ((status = app_io_xran_iq_content_get_cp_ul(p_o_xu_cfg->appMode, pXranConf, + psBbuIo, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_cp_ul"); + } + } + } + + } /*for(tti = 0; tti < XRAN_N_FE_BUF_LEN; tti++)*/ + } /*for(cc_id = 0; cc_id xranCat == XRAN_CATEGORY_A) + if(p_s_cfg->xranCat == XRAN_CATEGORY_A && !(p_s_cfg->numUlAxc)) p_s_cfg->numUlAxc = p_s_cfg->numAxc; + printf("eAxCiD config cat-%s\n",(p_s_cfg->xranCat == XRAN_CATEGORY_A)?"A":"B"); printf("bit_cuPortId %2d mask 0x%04x\n",p_eAxC_cfg->bit_cuPortId, p_eAxC_cfg->mask_cuPortId); printf("bit_bandSectorId %2d mask 0x%04x\n",p_eAxC_cfg->bit_bandSectorId, p_eAxC_cfg->mask_bandSectorId); printf("bit_ccId %2d mask 0x%04x\n",p_eAxC_cfg->bit_ccId, p_eAxC_cfg->mask_ccId); @@ -2469,79 +3065,102 @@ app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, int32_t o_xu_id = 0; uint32_t nCenterFreq = 0; struct xran_prb_map* pRbMap = NULL; - - memset(p_xran_fh_cfg, 0, sizeof(struct xran_fh_config)); - o_xu_id = p_o_xu_cfg->o_xu_id; - - p_xran_fh_cfg->nDLRBs = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, p_o_xu_cfg->nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA); - p_xran_fh_cfg->nULRBs = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, p_o_xu_cfg->nULBandwidth, p_o_xu_cfg->nULAbsFrePointA); - - if(p_o_xu_cfg->DynamicSectionEna == 0){ - pRbMap = p_o_xu_cfg->p_PrbMapDl; - - pRbMap->dir = XRAN_DIR_DL; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = 0; - pRbMap->ru_port_id = 0; - pRbMap->tti_id = 0; - pRbMap->start_sym_id = 0; - pRbMap->nPrbElm = 1; - pRbMap->prbMap[0].nStartSymb = 0; - pRbMap->prbMap[0].numSymb = 14; - pRbMap->prbMap[0].nRBStart = 0; - pRbMap->prbMap[0].nRBSize = p_xran_fh_cfg->nDLRBs; - pRbMap->prbMap[0].nBeamIndex = 0; - pRbMap->prbMap[0].compMethod = XRAN_COMPMETHOD_NONE; - pRbMap->prbMap[0].iqWidth = 16; - - pRbMap = p_o_xu_cfg->p_PrbMapUl; - pRbMap->dir = XRAN_DIR_UL; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = 0; - pRbMap->ru_port_id = 0; - pRbMap->tti_id = 0; - pRbMap->start_sym_id = 0; - pRbMap->nPrbElm = 1; - pRbMap->prbMap[0].nStartSymb = 0; - pRbMap->prbMap[0].numSymb = 14; - pRbMap->prbMap[0].nRBStart = 0; - pRbMap->prbMap[0].nRBSize = p_xran_fh_cfg->nULRBs; - pRbMap->prbMap[0].nBeamIndex = 0; - pRbMap->prbMap[0].compMethod = XRAN_COMPMETHOD_NONE; - pRbMap->prbMap[0].iqWidth = 16; - } else { - pRbMap = p_o_xu_cfg->p_PrbMapDl; - - pRbMap->dir = XRAN_DIR_DL; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = 0; - pRbMap->ru_port_id = 0; - pRbMap->tti_id = 0; - pRbMap->start_sym_id = 0; - - pRbMap = p_o_xu_cfg->p_PrbMapUl; - pRbMap->dir = XRAN_DIR_UL; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = 0; - pRbMap->ru_port_id = 0; - pRbMap->tti_id = 0; - pRbMap->start_sym_id = 0; - - pRbMap = p_o_xu_cfg->p_PrbMapSrs; - pRbMap->dir = XRAN_DIR_UL; - pRbMap->xran_port = 0; - pRbMap->band_id = 0; - pRbMap->cc_id = 0; - pRbMap->ru_port_id = 0; - pRbMap->tti_id = 0; - pRbMap->start_sym_id = 0; + + memcpy(&p_xran_fh_cfg->perMu, &p_o_xu_cfg->perMu, sizeof(struct xran_fh_per_mu_cfg)* XRAN_MAX_NUM_MU); + for(i = 0; i < p_o_xu_cfg->numMu; i++){ + uint8_t mu = p_o_xu_cfg->mu_number[i]; + p_xran_fh_cfg->perMu[mu].nDLRBs = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, p_o_xu_cfg->perMu[mu].nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA); + p_xran_fh_cfg->perMu[mu].nULRBs = app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, p_o_xu_cfg->perMu[mu].nULBandwidth, p_o_xu_cfg->nULAbsFrePointA); + p_xran_fh_cfg->perMu[mu].eaxcOffset = p_o_xu_cfg->perMu[mu].eaxcOffset; + + if(p_o_xu_cfg->DynamicSectionEna == 0){ + pRbMap = p_o_xu_cfg->p_PrbMapDl[mu]; + pRbMap->dir = XRAN_DIR_DL; + pRbMap->xran_port = 0; + pRbMap->band_id = 0; + pRbMap->cc_id = 0; + pRbMap->ru_port_id = 0; + pRbMap->tti_id = 0; + pRbMap->start_sym_id = 0; + pRbMap->nPrbElm = 1; + pRbMap->prbMap[0].nStartSymb = 0; + pRbMap->prbMap[0].numSymb = 14; + pRbMap->prbMap[0].nRBStart = 0; + pRbMap->prbMap[0].nRBSize = p_xran_fh_cfg->perMu[mu].nDLRBs; + pRbMap->prbMap[0].nBeamIndex = 0; + pRbMap->prbMap[0].compMethod = XRAN_COMPMETHOD_NONE; + pRbMap->prbMap[0].iqWidth = 16; + + pRbMap = p_o_xu_cfg->p_PrbMapUl[mu]; + pRbMap->dir = XRAN_DIR_UL; + pRbMap->xran_port = 0; + pRbMap->band_id = 0; + pRbMap->cc_id = 0; + pRbMap->ru_port_id = 0; + pRbMap->tti_id = 0; + pRbMap->start_sym_id = 0; + pRbMap->nPrbElm = 1; + pRbMap->prbMap[0].nStartSymb = 0; + pRbMap->prbMap[0].numSymb = 14; + pRbMap->prbMap[0].nRBStart = 0; + pRbMap->prbMap[0].nRBSize = p_xran_fh_cfg->perMu[mu].nULRBs; + pRbMap->prbMap[0].nBeamIndex = 0; + pRbMap->prbMap[0].compMethod = XRAN_COMPMETHOD_NONE; + pRbMap->prbMap[0].iqWidth = 16; + } else { + pRbMap = p_o_xu_cfg->p_PrbMapDl[mu]; + pRbMap->dir = XRAN_DIR_DL; + pRbMap->xran_port = 0; + pRbMap->band_id = 0; + pRbMap->cc_id = 0; + pRbMap->ru_port_id = 0; + pRbMap->tti_id = 0; + pRbMap->start_sym_id = 0; + + pRbMap = p_o_xu_cfg->p_PrbMapUl[mu]; + pRbMap->dir = XRAN_DIR_UL; + pRbMap->xran_port = 0; + pRbMap->band_id = 0; + pRbMap->cc_id = 0; + pRbMap->ru_port_id = 0; + pRbMap->tti_id = 0; + pRbMap->start_sym_id = 0; + + pRbMap = p_o_xu_cfg->p_PrbMapSrs; + pRbMap->dir = XRAN_DIR_UL; + pRbMap->xran_port = 0; + pRbMap->band_id = 0; + pRbMap->cc_id = 0; + pRbMap->ru_port_id = 0; + pRbMap->tti_id = 0; + pRbMap->start_sym_id = 0; + } + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachSubcSpacing = mu; + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachFreqStart = 0; + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachFilterIdx = XRAN_FILTERINDEX_PRACH_ABC; + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachConfIdx = p_o_xu_cfg->perMu[mu].prachConfigIndex; + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachConfIdxLTE = p_o_xu_cfg->perMu[mu].prachConfigIndexLTE; //will be used in case of dss only + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachFreqOffset = -792; /*PRB start is marked as 0. hence this to be adjusted for NB-IOT*/ + + p_xran_fh_cfg->srs_conf.symbMask = p_o_xu_cfg->srsSymMask; // deprecated + + if(mu==XRAN_NBIOT_MU){ + /*NPRACH Parameters to use only in case of NB-IOT: L1 should fill these */ + p_xran_fh_cfg->perMu[mu].prach_conf.nprachformat = p_o_xu_cfg->nprachformat; + p_xran_fh_cfg->perMu[mu].prach_conf.periodicity = p_o_xu_cfg->periodicity; + p_xran_fh_cfg->perMu[mu].prach_conf.startTime = p_o_xu_cfg->startTime; + p_xran_fh_cfg->perMu[mu].prach_conf.suboffset = p_o_xu_cfg->suboffset; + p_xran_fh_cfg->perMu[mu].prach_conf.numSubCarriers = p_o_xu_cfg->numSubCarriers; + p_xran_fh_cfg->perMu[mu].prach_conf.nRep = p_o_xu_cfg->nRep; + p_xran_fh_cfg->perMu[mu].prach_conf.nPrachFreqOffset = p_o_xu_cfg->perMu[mu].freqOffset; + } + p_xran_fh_cfg->perMu[mu].prachEnable = p_o_xu_cfg->perMu[mu].prachEnable; } + if(p_o_xu_cfg->xranCat == XRAN_CATEGORY_A && !(p_o_xu_cfg->numUlAxc)) + p_o_xu_cfg->numUlAxc = p_o_xu_cfg->numAxc; + p_xran_fh_cfg->sector_id = 0; p_xran_fh_cfg->dpdk_port = o_xu_id; p_xran_fh_cfg->nCC = p_o_xu_cfg->numCC; @@ -2550,26 +3169,25 @@ app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, p_xran_fh_cfg->nAntElmTRx = p_o_xu_cfg->antElmTRx; p_xran_fh_cfg->frame_conf.nFrameDuplexType = p_o_xu_cfg->nFrameDuplexType; - p_xran_fh_cfg->frame_conf.nNumerology = p_o_xu_cfg->mu_number; + p_xran_fh_cfg->numMUs = p_o_xu_cfg->numMu; p_xran_fh_cfg->frame_conf.nTddPeriod = p_o_xu_cfg->nTddPeriod; for (i = 0; i < p_o_xu_cfg->nTddPeriod; i++){ p_xran_fh_cfg->frame_conf.sSlotConfig[i] = p_o_xu_cfg->sSlotConfig[i]; } - p_xran_fh_cfg->prach_conf.nPrachSubcSpacing = p_o_xu_cfg->mu_number; - p_xran_fh_cfg->prach_conf.nPrachFreqStart = 0; - p_xran_fh_cfg->prach_conf.nPrachFilterIdx = XRAN_FILTERINDEX_PRACH_ABC; - p_xran_fh_cfg->prach_conf.nPrachConfIdx = p_o_xu_cfg->prachConfigIndex; - p_xran_fh_cfg->prach_conf.nPrachConfIdxLTE = p_o_xu_cfg->prachConfigIndexLTE; //will be used in case of dss only - p_xran_fh_cfg->prach_conf.nPrachFreqOffset = -792; - - p_xran_fh_cfg->srs_conf.symbMask = p_o_xu_cfg->srsSymMask; // deprecated - - if(p_o_xu_cfg->numAxc > XRAN_MAX_PRACH_ANT_NUM) - p_xran_fh_cfg->srs_conf.eAxC_offset = p_o_xu_cfg->numAxc + XRAN_MAX_PRACH_ANT_NUM; /* PUSCH, PRACH, SRS */ - else - p_xran_fh_cfg->srs_conf.eAxC_offset = 2 * p_o_xu_cfg->numAxc; /* PUSCH, PRACH, SRS */ + /* TODO: xran code uses numEaxc for prach cp transmission regardless of whether it is + * greater than XRAN_MAX_PRACH_ANT_NUM. This logic contradicts with that. + * Also, srsEaxcOffset should be set on top of the antId offset for the numerology used for PDSCH, PUSCH. + */ + if(p_o_xu_cfg->numAxc > XRAN_MAX_PRACH_ANT_NUM){ + p_xran_fh_cfg->srs_conf.srsEaxcOffset = p_o_xu_cfg->numAxc + XRAN_MAX_PRACH_ANT_NUM; /* PUSCH, PRACH, SRS */ + } + else{ + p_xran_fh_cfg->srs_conf.srsEaxcOffset = 2 * p_o_xu_cfg->numAxc; /* PUSCH, PRACH, SRS */ + } + p_xran_fh_cfg->csirs_conf.csirsEaxcOffset = p_o_xu_cfg->numAxc; + p_xran_fh_cfg->srs_conf.slot = p_o_xu_cfg->srsSlot; p_xran_fh_cfg->srs_conf.ndm_offset = p_o_xu_cfg->srsNdmOffset; p_xran_fh_cfg->srs_conf.ndm_txduration = p_o_xu_cfg->srsNdmTxDuration; @@ -2578,72 +3196,63 @@ app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, p_xran_fh_cfg->ru_conf.xranCompHdrType = p_o_xu_cfg->CompHdrType; p_xran_fh_cfg->ru_conf.xranCat = p_o_xu_cfg->xranCat; - if (p_xran_fh_cfg->ru_conf.xranCat == XRAN_CATEGORY_A) - p_xran_fh_cfg->neAxcUl = p_xran_fh_cfg->neAxc; - - p_xran_fh_cfg->ru_conf.iqWidth = p_o_xu_cfg->p_PrbMapDl->prbMap[0].iqWidth; + p_xran_fh_cfg->ru_conf.iqWidth = p_o_xu_cfg->p_PrbMapDl[p_o_xu_cfg->mu_number[0]]->prbMap[0].iqWidth; if (p_o_xu_cfg->compression == 0) - p_xran_fh_cfg->ru_conf.compMeth = XRAN_COMPMETHOD_NONE; + p_xran_fh_cfg->ru_conf.compMeth = XRAN_COMPMETHOD_NONE; else - p_xran_fh_cfg->ru_conf.compMeth = XRAN_COMPMETHOD_BLKFLOAT; - - p_xran_fh_cfg->ru_conf.compMeth_PRACH = p_o_xu_cfg->prachCompMethod; + p_xran_fh_cfg->ru_conf.compMeth = XRAN_COMPMETHOD_BLKFLOAT; + + + p_xran_fh_cfg->ru_conf.compMeth_PRACH = p_o_xu_cfg->prachCompMethod; if (p_o_xu_cfg->prachCompMethod == 0) p_o_xu_cfg->prachiqWidth = 16; p_xran_fh_cfg->ru_conf.iqWidth_PRACH = p_o_xu_cfg->prachiqWidth; - - p_xran_fh_cfg->ru_conf.fftSize = 0; - while (p_o_xu_cfg->nULFftSize >>= 1) - ++p_xran_fh_cfg->ru_conf.fftSize; - + + for(i=0; i < p_o_xu_cfg->numMu ; i++){ + uint8_t mu = p_o_xu_cfg->mu_number[i]; + p_xran_fh_cfg->mu_number[i] = p_o_xu_cfg->mu_number[i]; + p_xran_fh_cfg->ru_conf.fftSize[mu] = 0; + while (p_o_xu_cfg->perMu[mu].nULFftSize >>= 1) + ++p_xran_fh_cfg->ru_conf.fftSize[mu]; + } p_xran_fh_cfg->ru_conf.byteOrder = (p_o_xu_cfg->nebyteorderswap == 1) ? XRAN_NE_BE_BYTE_ORDER : XRAN_CPU_LE_BYTE_ORDER ; p_xran_fh_cfg->ru_conf.iqOrder = (p_o_xu_cfg->iqswap == 1) ? XRAN_Q_I_ORDER : XRAN_I_Q_ORDER; - printf("FFT Order %d\n", p_xran_fh_cfg->ru_conf.fftSize); - - nCenterFreq = p_o_xu_cfg->nDLAbsFrePointA + (((p_xran_fh_cfg->nDLRBs * N_SC_PER_PRB) / 2) * app_xran_get_scs(p_o_xu_cfg->mu_number)); + nCenterFreq = p_o_xu_cfg->nDLAbsFrePointA + (((p_xran_fh_cfg->perMu[p_o_xu_cfg->mu_number[0]].nDLRBs * N_SC_PER_PRB(false)) / 2) * app_xran_get_scs(p_o_xu_cfg->mu_number[0])); p_xran_fh_cfg->nDLCenterFreqARFCN = app_xran_cal_nrarfcn(nCenterFreq); printf("DL center freq %d DL NR-ARFCN %d\n", nCenterFreq, p_xran_fh_cfg->nDLCenterFreqARFCN); - nCenterFreq = p_o_xu_cfg->nULAbsFrePointA + (((p_xran_fh_cfg->nULRBs * N_SC_PER_PRB) / 2) * app_xran_get_scs(p_o_xu_cfg->mu_number)); + nCenterFreq = p_o_xu_cfg->nULAbsFrePointA + (((p_xran_fh_cfg->perMu[p_o_xu_cfg->mu_number[0]].nULRBs * N_SC_PER_PRB(false)) / 2) * app_xran_get_scs(p_o_xu_cfg->mu_number[0])); p_xran_fh_cfg->nULCenterFreqARFCN = app_xran_cal_nrarfcn(nCenterFreq); printf("UL center freq %d UL NR-ARFCN %d\n", nCenterFreq, p_xran_fh_cfg->nULCenterFreqARFCN); p_xran_fh_cfg->bbdev_dec = NULL; p_xran_fh_cfg->bbdev_enc = NULL; + p_xran_fh_cfg->bbdev_srs_fft = NULL; + p_xran_fh_cfg->bbdev_prach_ifft = NULL; p_xran_fh_cfg->log_level = 1; - p_xran_fh_cfg->max_sections_per_slot = RTE_MAX(p_o_xu_cfg->max_sections_per_slot, XRAN_MIN_SECTIONS_PER_SLOT); - p_xran_fh_cfg->max_sections_per_symbol = RTE_MAX(p_o_xu_cfg->max_sections_per_symbol, XRAN_MIN_SECTIONS_PER_SLOT); + if(p_o_xu_cfg->max_sections_per_slot > XRAN_MAX_SECTIONS_PER_SLOT) + { + printf("Requested value for max sections per slot (%u) is greater than what we support (%u)\n", + p_o_xu_cfg->max_sections_per_slot, XRAN_MAX_SECTIONS_PER_SLOT); + exit(1); + } + + p_xran_fh_cfg->max_sections_per_symbol = XRAN_MAX_SECTIONS_PER_SLOT; p_xran_fh_cfg->RunSlotPrbMapBySymbolEnable = p_o_xu_cfg->RunSlotPrbMapBySymbolEnable; printf("Max Sections: %d per symb %d per slot\n", p_xran_fh_cfg->max_sections_per_slot, p_xran_fh_cfg->max_sections_per_symbol); if(p_o_xu_cfg->maxFrameId) p_xran_fh_cfg->ru_conf.xran_max_frame = p_o_xu_cfg->maxFrameId; - - p_xran_fh_cfg->Tadv_cp_dl = p_o_xu_cfg->Tadv_cp_dl; - p_xran_fh_cfg->T2a_min_cp_dl = p_o_xu_cfg->T2a_min_cp_dl; - p_xran_fh_cfg->T2a_max_cp_dl = p_o_xu_cfg->T2a_max_cp_dl; - p_xran_fh_cfg->T2a_min_cp_ul = p_o_xu_cfg->T2a_min_cp_ul; - p_xran_fh_cfg->T2a_max_cp_ul = p_o_xu_cfg->T2a_max_cp_ul; - p_xran_fh_cfg->T2a_min_up = p_o_xu_cfg->T2a_min_up; - p_xran_fh_cfg->T2a_max_up = p_o_xu_cfg->T2a_max_up; - p_xran_fh_cfg->Ta3_min = p_o_xu_cfg->Ta3_min; - p_xran_fh_cfg->Ta3_max = p_o_xu_cfg->Ta3_max; - p_xran_fh_cfg->T1a_min_cp_dl = p_o_xu_cfg->T1a_min_cp_dl; - p_xran_fh_cfg->T1a_max_cp_dl = p_o_xu_cfg->T1a_max_cp_dl; - p_xran_fh_cfg->T1a_min_cp_ul = p_o_xu_cfg->T1a_min_cp_ul; - p_xran_fh_cfg->T1a_max_cp_ul = p_o_xu_cfg->T1a_max_cp_ul; - p_xran_fh_cfg->T1a_min_up = p_o_xu_cfg->T1a_min_up; - p_xran_fh_cfg->T1a_max_up = p_o_xu_cfg->T1a_max_up; - p_xran_fh_cfg->Ta4_min = p_o_xu_cfg->Ta4_min; - p_xran_fh_cfg->Ta4_max = p_o_xu_cfg->Ta4_max; - p_xran_fh_cfg->enableCP = p_o_xu_cfg->enableCP; - p_xran_fh_cfg->prachEnable = p_o_xu_cfg->enablePrach; + p_xran_fh_cfg->dropPacketsUp = p_o_xu_cfg->DropPacketsUp; p_xran_fh_cfg->srsEnable = p_o_xu_cfg->enableSrs; + p_xran_fh_cfg->csirsEnable = p_o_xu_cfg->csirsEnable; + p_xran_fh_cfg->srsEnableCp = 1; + p_xran_fh_cfg->SrsDelaySym = 4; p_xran_fh_cfg->puschMaskEnable = p_o_xu_cfg->puschMaskEnable; p_xran_fh_cfg->puschMaskSlot = p_o_xu_cfg->puschMaskSlot; p_xran_fh_cfg->debugStop = p_o_xu_cfg->debugStop; @@ -2652,9 +3261,6 @@ app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, p_xran_fh_cfg->GPS_Alpha = p_o_xu_cfg->GPS_Alpha; p_xran_fh_cfg->GPS_Beta = p_o_xu_cfg->GPS_Beta; - p_xran_fh_cfg->cp_vlan_tag = p_o_xu_cfg->cp_vlan_tag; - p_xran_fh_cfg->up_vlan_tag = p_o_xu_cfg->up_vlan_tag; - p_xran_fh_cfg->dssEnable = p_o_xu_cfg->dssEnable; p_xran_fh_cfg->dssPeriod = p_o_xu_cfg->dssPeriod; for(i=0; idssPeriod; i++) { @@ -2662,7 +3268,6 @@ app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, } return ret; - } int32_t @@ -2704,6 +3309,7 @@ app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, s p_xran_fh_init->io_cfg.core = p_use_cfg->io_core; p_xran_fh_init->io_cfg.system_core = p_use_cfg->system_core; p_xran_fh_init->io_cfg.pkt_proc_core = p_use_cfg->io_worker; /* do not start */ + p_xran_fh_init->io_cfg.pkt_proc_core_64_127 = p_use_cfg->io_worker_64_127; p_xran_fh_init->io_cfg.pkt_aux_core = 0; /* do not start */ p_xran_fh_init->io_cfg.timing_core = p_use_cfg->io_core; p_xran_fh_init->io_cfg.dpdkIoVaMode = p_use_cfg->iova_mode; @@ -2715,16 +3321,14 @@ app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, s p_xran_fh_init->io_cfg.eowd_cmn[APP_O_RU].measState = p_use_cfg->owdmMeasState; p_xran_fh_init->io_cfg.eowd_cmn[APP_O_RU].measId = p_use_cfg->owdmMeasId; p_xran_fh_init->io_cfg.eowd_cmn[APP_O_RU].owdm_enable = p_use_cfg->owdmEnable; - p_xran_fh_init->io_cfg.eowd_cmn[APP_O_RU].owdm_PlLength = p_use_cfg->owdmPlLength; + p_xran_fh_init->io_cfg.eowd_cmn[APP_O_RU].owdm_PlLength = p_use_cfg->owdmPlLength; } if(p_use_cfg->bbu_offload) { if (p_xran_fh_init->io_cfg.id == 0) { /* O-DU */ - p_xran_fh_init->io_cfg.bbu_offload = 1; p_xran_fh_init->dlCpProcBurst = 1; - } else { - p_xran_fh_init->io_cfg.bbu_offload = 0; } + p_xran_fh_init->io_cfg.bbu_offload = 1; } else { p_xran_fh_init->io_cfg.bbu_offload = 0; } @@ -2745,7 +3349,6 @@ app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, s else p_xran_fh_init->mlogxranenable = 1; - app_io_xran_eAxCid_conf_set(&p_xran_fh_init->eAxCId_conf, p_o_xu_cfg); i = 0; if(p_use_cfg->one_vf_cu_plane == 1){ @@ -2771,6 +3374,8 @@ app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, s } p_xran_fh_init->io_cfg.one_vf_cu_plane = p_use_cfg->one_vf_cu_plane; + p_xran_fh_init->io_cfg.num_mbuf_alloc = NUM_MBUFS; + p_xran_fh_init->io_cfg.num_mbuf_vf_alloc = NUM_MBUFS_VF; if(p_xran_fh_init->io_cfg.one_vf_cu_plane) { p_use_cfg->num_vfs = i; @@ -2806,18 +3411,37 @@ app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, s } p_o_xu_cfg->p_buff = p_o_xu_buff[o_xu_id]; + + if(app_io_xran_eAxCid_conf_set(&p_xran_fh_init->eAxCId_conf[o_xu_id], p_o_xu_cfg) != 0) + { + printf("%s:%d: app_io_xran_eAxCid_conf_set failed", __func__, __LINE__); + return -1; + } + p_o_xu_cfg++; } + p_xran_fh_init->lbmEnable = p_use_cfg->lbmEnable; + p_xran_fh_init->lbm_common_info.LBMPeriodicity = p_use_cfg->LBMPeriodicity; + p_xran_fh_init->lbm_common_info.LBRTimeOut = p_use_cfg->LBRTimeOut; + p_xran_fh_init->lbm_common_info.numRetransmissions = p_use_cfg->numRetransmissions; + return ret; } int32_t app_io_xran_buffers_max_sz_set (RuntimeConfig* p_o_xu_cfg) { - uint32_t xran_max_sections_per_slot = RTE_MAX(p_o_xu_cfg->max_sections_per_slot, XRAN_MIN_SECTIONS_PER_SLOT); + if(p_o_xu_cfg->max_sections_per_slot > XRAN_MAX_SECTIONS_PER_SLOT) + { + printf("Requested value for max sections per slot (%u) is greater than what we support (%u)\n", + p_o_xu_cfg->max_sections_per_slot, XRAN_MAX_SECTIONS_PER_SLOT); + exit(1); + } + uint32_t xran_max_sections_per_slot = XRAN_MAX_SECTIONS_PER_SLOT; + - if (p_o_xu_cfg->mu_number <= 1){ + if (p_o_xu_cfg->mu_number[0] <= 1){ /*CHECK: How these will change?*/ if (p_o_xu_cfg->mtu > XRAN_MTU_DEFAULT) { nFpgaToSW_FTH_RxBufferLen = 13168; /* 273*12*4 + 64*/ nFpgaToSW_PRACH_RxBufferLen = 8192; @@ -2835,7 +3459,7 @@ app_io_xran_buffers_max_sz_set (RuntimeConfig* p_o_xu_cfg) sizeof(struct radio_app_common_hdr) + sizeof(struct data_section_hdr)); } - } else if (p_o_xu_cfg->mu_number == 3) { + } else if (p_o_xu_cfg->mu_number[0] == 3) { if (p_o_xu_cfg->mtu > XRAN_MTU_DEFAULT) { nFpgaToSW_FTH_RxBufferLen = 3328; nFpgaToSW_PRACH_RxBufferLen = 8192; @@ -2854,7 +3478,7 @@ app_io_xran_buffers_max_sz_set (RuntimeConfig* p_o_xu_cfg) sizeof(struct data_section_hdr)); } } else { - printf("given numerology is not supported %d\n", p_o_xu_cfg->mu_number); + printf("given numerology is not supported %d\n", p_o_xu_cfg->mu_number[0]); exit(-1); } printf("nSW_ToFpga_FTH_TxBufferLen %d\n", nSW_ToFpga_FTH_TxBufferLen); @@ -2887,26 +3511,32 @@ app_io_xran_map_cellid_to_port(struct bbu_xran_io_if * p_xran_io, uint32_t cell_ #ifndef FWK_ENABLED void -app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { - app_io_xran_fh_rx_callback(pCallbackTag, status); + app_io_xran_fh_rx_callback(pCallbackTag, status,mu); } void -app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_bfw_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { - app_io_xran_fh_rx_bfw_callback(pCallbackTag, status); + app_io_xran_fh_rx_bfw_callback(pCallbackTag, status, mu); } void -app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_prach_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { - app_io_xran_fh_rx_prach_callback(pCallbackTag, status); + app_io_xran_fh_rx_prach_callback(pCallbackTag, status, mu); } void -app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status) +app_io_xran_fh_bbu_rx_srs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) { - app_io_xran_fh_rx_srs_callback(pCallbackTag, status); + app_io_xran_fh_rx_srs_callback(pCallbackTag, status, mu); } #endif + +void +app_io_xran_fh_bbu_rx_csirs_callback(void *pCallbackTag, xran_status_t status, uint8_t mu) +{ + app_io_xran_fh_rx_csirs_callback(pCallbackTag, status, mu); +} diff --git a/fhi_lib/app/src/app_io_fh_xran.h b/fhi_lib/app/src/app_io_fh_xran.h index 86fa605..50888ca 100644 --- a/fhi_lib/app/src/app_io_fh_xran.h +++ b/fhi_lib/app/src/app_io_fh_xran.h @@ -49,7 +49,7 @@ extern "C" { #define SW_FPGA_FH_TOTAL_BUFFER_LEN 1*1024*1024*1024 #define FPGA_TO_SW_PRACH_RX_BUFFER_LEN (8192) -extern void* app_io_xran_handle; +extern void* app_io_xran_handle[XRAN_PORTS_NUM]; extern struct xran_fh_init app_io_xran_fh_init; extern struct xran_fh_config app_io_xran_fh_config[XRAN_PORTS_NUM]; @@ -70,11 +70,14 @@ typedef enum { XRANFTHRX_PRB_MAP_IN, XRANFTHTX_SEC_DESC_IN, XRANFTHRACH_IN, + XRANFTHRACH_PRB_MAP_IN, XRANSRS_IN, XRANSRS_PRB_MAP_IN, XRANCP_PRB_MAP_IN_RX, XRANCP_PRB_MAP_IN_TX, XRANSRS_SEC_DESC_IN, + XRANCSIRS_TX, + XRANCSIRS_PRB_MAP_TX, MAX_SW_XRAN_INTERFACE_NUM } SWXRANInterfaceTypeEnum; @@ -90,26 +93,31 @@ struct xran_io_buf_ctrl { int32_t nSegGenerated; // how many date segment are generated by DL LTE processing or received from FE // -1 means that DL packet to be transmitted is not ready in BS int32_t nSegTransferred; // number of data segments has been transmitted or received - struct rte_mbuf *pData[N_MAX_BUFFER_SEGMENT]; // point to DPDK allocated memory pool + struct rte_mbuf *pData; // point to DPDK allocated memory pool struct xran_buffer_list sBufferList; }; -struct xran_io_shared_ctrl { - enum xran_input_byte_order byteOrder; /* Order of bytes in int16_t in buffer. Big or little endian */ - enum xran_input_i_q_order iqOrder; /* order of IQs in the buffer */ - +struct io_shared_buff_perMu { + int32_t nRxPktBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; + int32_t nSRSRxPktBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; + int32_t nCSIRSRxPktBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS][XRAN_NUM_OF_SYMBOL_PER_SLOT]; + int32_t nPRACHRxPktBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; /* io struct */ struct xran_io_buf_ctrl sFrontHaulTxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_io_buf_ctrl sFrontHaulTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_io_buf_ctrl sFrontHaulRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_io_buf_ctrl sFrontHaulRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_io_buf_ctrl sFHPrachRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; - struct xran_io_buf_ctrl sFHPrachRxBbuIoBufCtrlDecomp[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; + struct xran_io_buf_ctrl sFHPrachRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; /* Cat B */ struct xran_io_buf_ctrl sFHSrsRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR]; struct xran_io_buf_ctrl sFHSrsRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR]; + /* CSI Cat B */ + struct xran_io_buf_ctrl sFHCsirsTxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS]; + struct xran_io_buf_ctrl sFHCsirsTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS]; + struct xran_io_buf_ctrl sFHCpRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_io_buf_ctrl sFHCpTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; @@ -119,15 +127,23 @@ struct xran_io_shared_ctrl { struct xran_flat_buffer sFrontHaulRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; struct xran_flat_buffer sFrontHaulRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_flat_buffer sFHPrachRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; - struct xran_flat_buffer sFHPrachRxBuffersDecomp[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT]; - + struct xran_flat_buffer sFHPrachRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; + struct xran_flat_buffer sFrontHaulCpRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; struct xran_flat_buffer sFrontHaulCpTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; /* Cat B SRS buffers */ struct xran_flat_buffer sFHSrsRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT]; struct xran_flat_buffer sFHSrsRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR]; + /* Cat B CSI-RS buffers */ + struct xran_flat_buffer sFHCsirsTxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS][XRAN_NUM_OF_SYMBOL_PER_SLOT]; + struct xran_flat_buffer sFHCsirsTxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_CSIRS_PORTS]; +}; +struct xran_io_shared_ctrl { + enum xran_input_byte_order byteOrder; /* Order of bytes in int16_t in buffer. Big or little endian */ + enum xran_input_i_q_order iqOrder; /* order of IQs in the buffer */ + struct io_shared_buff_perMu io_buff_perMu[XRAN_MAX_NUM_MU]; // struct xran_flat_buffer sFHCpRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; }; @@ -156,13 +172,14 @@ struct bbu_xran_io_if { struct xran_cb_tag PrachCbTag[XRAN_PORTS_NUM][XRAN_MAX_SECTOR_NR]; struct xran_cb_tag SrsCbTag[XRAN_PORTS_NUM][XRAN_MAX_SECTOR_NR]; struct xran_cb_tag BfwCbTag[XRAN_PORTS_NUM][XRAN_MAX_SECTOR_NR]; + struct xran_cb_tag CsirsCbTag[XRAN_PORTS_NUM][XRAN_MAX_SECTOR_NR]; }; struct bbu_xran_io_if* app_io_xran_if_alloc(void); struct bbu_xran_io_if* app_io_xran_if_get(void); void app_io_xran_if_free(void); struct xran_io_shared_ctrl * app_io_xran_if_ctrl_get(uint32_t o_xu_id); -int32_t app_io_xran_sfidx_get(uint8_t nNrOfSlotInSf); +int32_t app_io_xran_sfidx_get(uint8_t mu); int32_t app_io_xran_interface(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg, UsecaseConfig* p_use_cfg, struct xran_fh_init* p_xran_fh_init); int32_t app_io_xran_iq_content_init(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg); @@ -172,48 +189,67 @@ int32_t app_io_xran_fh_config_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o int32_t app_io_xran_fh_init_init(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, struct xran_fh_init* p_xran_fh_init); int32_t app_io_xran_buffers_max_sz_set (RuntimeConfig* p_o_xu_cfg); -int32_t app_io_xran_dl_post_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, uint32_t nAntStart, uint32_t nAntNum); +int32_t app_io_xran_dl_post_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, uint32_t nAntStart, uint32_t nAntNum, uint8_t mu); -int32_t app_io_xran_dl_tti_call_back(void * param); -int32_t app_io_xran_ul_half_slot_call_back(void * param); -int32_t app_io_xran_ul_full_slot_call_back(void * param); +int32_t app_io_xran_dl_tti_call_back(void * param, uint8_t mu); +int32_t app_io_xran_ul_half_slot_call_back(void * param, uint8_t mu); +int32_t app_io_xran_ul_full_slot_call_back(void * param, uint8_t mu); int32_t app_io_xran_ul_custom_sym_call_back(void * param, struct xran_sense_of_time* time); int32_t app_io_xran_map_cellid_to_port(struct bbu_xran_io_if * p_xran_io, uint32_t cell_id, uint32_t *ret_cc_id); -int32_t app_io_xran_iq_content_init_cp_tx(uint8_t appMode, struct xran_fh_config *pXranConf, +int32_t app_io_xran_iq_content_init_dl_cp(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); -int32_t app_io_xran_iq_content_init_cp_rx(uint8_t appMode, struct xran_fh_config *pXranConf, +int32_t app_io_xran_iq_content_init_ul_cp(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_init_up_tx(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_init_up_prach(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_init_up_srs(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); + +int32_t app_io_xran_iq_content_init_up_csirs(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_get_up_rx(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_get_up_prach(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); int32_t app_io_xran_iq_content_get_up_srs(uint8_t appMode, struct xran_fh_config *pXranConf, struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, - int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId); + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); + +int32_t app_io_xran_iq_content_get_up_csirs(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); + +int32_t app_io_xran_iq_content_get_cp_dl(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); + +int32_t app_io_xran_iq_content_get_cp_ul(uint8_t appMode, struct xran_fh_config *pXranConf, + struct bbu_xran_io_if *psBbuIo, struct xran_io_shared_ctrl *psIoCtrl, struct o_xu_buffers * p_iq, + int32_t cc_id, int32_t ant_id, int32_t sym_id, int32_t tti, int32_t flowId, uint8_t mu); + + -void app_io_xran_if_stop(void); +void app_io_xran_if_stop(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg); +void app_io_xran_if_close(uint32_t o_xu_id, RuntimeConfig *p_o_xu_cfg); #ifdef __cplusplus } diff --git a/fhi_lib/app/src/app_profile_xran.c b/fhi_lib/app/src/app_profile_xran.c index f6ed277..632cfa7 100644 --- a/fhi_lib/app/src/app_profile_xran.c +++ b/fhi_lib/app/src/app_profile_xran.c @@ -23,6 +23,11 @@ #include #include #include +#include +#include +#include +#include + #include "common.h" #include "xran_fh_o_du.h" #include "xran_pkt.h" @@ -86,6 +91,35 @@ test_path_to_name(char *path, char *name) } +int xran_run_external_app(char *command) +{ + pid_t id; + char *newenvp[] = { "PATH=/bin:/sbin:/usr/bin:/usr/sbin:", NULL }; + char *newargv[] = { "/bin/sh", "-c", command, NULL }; + + id = fork(); + if(id < 0) /* Error */ + { + printf("fork failed!\n"); + return (-1); + } + else if(id == 0) /* Child process */ + { + if(execve(newargv[0], newargv, newenvp) < 0) + { + printf("Exec failed! (%s)\n", newargv[0]); + return (-1); + } + /* Context will be replaced from here */ + } + else /* Parent process */ + { +// printf("Waiting for the finish of child process...\n"); + wait(NULL); + } + + return (0); +} //------------------------------------------------------------------------------------------- @@ -106,18 +140,24 @@ xran_init_mlog_stats(char *file, uint64_t nTscFreq) { char command[1024]; FILE *pFile= NULL; + int fd; - pFile = fopen(file, "w"); - if (pFile == NULL) + fd = open(file, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXU); + if(fd != -1) + { + pFile = fdopen(fd, "w"); + } + if(fd == -1 || pFile == NULL) { printf("1: Cannot open %s to write in phydi_init_mlog_stats\n", file); return -1; } + fprintf(pFile, "------------------------------------------------------------------------------------------------------------\n"); fprintf(pFile, "SYSTEM_PARAMS:\n"); fprintf(pFile, "TSC_FREQ: %ld\n", nTscFreq); -#ifdef BBDEV_FEC_ACCL_NR5G +#if defined(BBDEV_FEC_ACCL_NR5G) || defined(BBDEB_FEC_ACCL) PPHYCFG_VARS pPhyCfgVars = phycfg_get_ctx(); if (pPhyCfgVars->dpdkBasebandFecMode == 0) @@ -145,11 +185,15 @@ xran_init_mlog_stats(char *file, uint64_t nTscFreq) pFile = NULL; usleep(100000); sprintf(command, "lscpu >> %s", file); - system(command); - usleep(100000); + xran_run_external_app(command); - pFile = fopen(file, "a"); - if (pFile == NULL) + usleep(100000); + fd = open(file, O_APPEND | O_WRONLY, S_IRWXU); + if(fd != -1) + { + pFile = fdopen(fd, "w"); + } + if(fd == -1 || pFile == NULL) { printf("2: Cannot open %s to write in %s\n", file, __FUNCTION__); return -1; @@ -160,7 +204,7 @@ xran_init_mlog_stats(char *file, uint64_t nTscFreq) usleep(100000); sprintf(command, "cat /proc/cmdline >> %s", file); - system(command); + xran_run_external_app(command); usleep(100000); pFile = fopen(file, "a"); @@ -176,7 +220,7 @@ xran_init_mlog_stats(char *file, uint64_t nTscFreq) usleep(100000); sprintf(command, "dmidecode -t memory >> %s", file); - system(command); + xran_run_external_app(command); usleep(100000); pFile = fopen(file, "a"); @@ -190,9 +234,8 @@ xran_init_mlog_stats(char *file, uint64_t nTscFreq) fclose(pFile); pFile = NULL; usleep(100000); - sprintf(command, "turbostat --num_iterations 1 --interval 1 -q >> %s", file); - - system(command); + sprintf(command, "chrt -f 99 turbostat --num_iterations 1 --interval 1 -q >> %s", file); + xran_run_external_app(command); usleep(100000); pFile = fopen(file, "a"); @@ -228,7 +271,8 @@ xran_get_mlog_stats(char *usecase, UsecaseConfig *puConf, RuntimeConfig *psConf[ MLogPrint((char *)MLogGetFileName()); MLogGetStats(PID_TTI_TIMER, &tti.cnt, &tti.max, &tti.min, &tti.avg); - if (tti.cnt != 0) { + if (tti.cnt != 0) + { sprintf(stats_file, "%s-%s-%s", XRAN_REPORT_FILE, (puConf->appMode == APP_O_DU)? "o-du" : "o-ru", usecase); printf("xran report file: %s\n", stats_file); ret = xran_init_mlog_stats(stats_file, mlog_times_p->ticks_per_usec); @@ -247,18 +291,18 @@ xran_get_mlog_stats(char *usecase, UsecaseConfig *puConf, RuntimeConfig *psConf[ goto exit; } - for (i = 0; i < psConf[0]->mu_number; i++) + for (i = 0; i < psConf[0]->mu_number[0]; i++) ttiDuration = ttiDuration >> 1; fprintf(pFile, "All data in this sheet are presented in usecs\n"); fprintf(pFile, "ORANTest: %s-%s (Num Cells: %d) (Num TTI: %d) (nNumerology: %d) (ttiDuration: %d usecs) (testStats: %d %ld %ld)\n", - (puConf->appMode == APP_O_DU)? "O-DU" : "O-RU", usecase, puConf->oXuNum * psConf[0]->numCC, tti.cnt, psConf[0]->mu_number, ttiDuration, puConf->appMode, mlog_times_p->xran_total_time, mlog_times_p->mlog_total_time); + (puConf->appMode == APP_O_DU)? "O-DU" : "O-RU", usecase, puConf->oXuNum * psConf[0]->numCC, tti.cnt, psConf[0]->mu_number[0], ttiDuration, puConf->appMode, mlog_times_p->xran_total_time, mlog_times_p->mlog_total_time); double xran_task_type_sum[XRAN_TASK_TYPE_MAX] = {0, 0, 0, 0, 0, 0}; char * xran_task_type_name[XRAN_TASK_TYPE_MAX] = { "GNB", "BBDEV", "Timer", "Radio", "CP", "UP" }; #define NUM_GNB_TASKS (5) -#define NUM_BBDEV_TASKS (4) +#define NUM_BBDEV_TASKS (8) #define NUM_TIMER_TASKS (7) #define NUM_RADIO_TASKS (2) #define NUM_CP_TASKS (7) @@ -275,6 +319,10 @@ xran_get_mlog_stats(char *usecase, UsecaseConfig *puConf, RuntimeConfig *psConf[ {PID_XRAN_BBDEV_DL_POLL_DISPATCH, XRAN_TASK_TYPE_BBDEV,"BBDEV_DL_POLL_DISPATCH \0"}, {PID_XRAN_BBDEV_UL_POLL, XRAN_TASK_TYPE_BBDEV, "BBDEV_UL_POLL \0"}, {PID_XRAN_BBDEV_UL_POLL_DISPATCH, XRAN_TASK_TYPE_BBDEV,"BBDEV_UL_POLL_DISPATCH \0"}, + {PID_XRAN_BBDEV_SRS_FFT_POLL, XRAN_TASK_TYPE_BBDEV, "BBDEV_SRS_FFT_POLL \0"}, + {PID_XRAN_BBDEV_SRS_FFT_POLL_DISPATCH, XRAN_TASK_TYPE_BBDEV,"BBDEV_SRS_FFT_POLL_DISPATCH \0"}, + {PID_XRAN_BBDEV_PRACH_IFFT_POLL, XRAN_TASK_TYPE_BBDEV, "BBDEV_PRACH_IFFT_POLL \0"}, + {PID_XRAN_BBDEV_PRACH_IFFT_POLL_DISPATCH, XRAN_TASK_TYPE_BBDEV,"BBDEV_PRACH_IFFT_POLL_DISPATCH \0"}, {PID_TTI_TIMER, XRAN_TASK_TYPE_TIMER, "TTI_TIMER \0"}, {PID_TTI_CB, XRAN_TASK_TYPE_TIMER, "TTI_CB \0"}, @@ -293,13 +341,13 @@ xran_get_mlog_stats(char *usecase, UsecaseConfig *puConf, RuntimeConfig *psConf[ {PID_CP_UL_CB, XRAN_TASK_TYPE_CP, "PID_CP_UL_CB \0"}, {PID_SYM_OTA_CB, XRAN_TASK_TYPE_CP, "SYM_OTA_CB \0"}, {PID_TTI_CB_TO_PHY, XRAN_TASK_TYPE_CP, "TTI_CB_TO_PHY \0"}, - {PID_PROCESS_CP_PKT, XRAN_TASK_TYPE_CP, "PROCESS_CP_PKT \0"}, + {PID_PROC_CP_PKT, XRAN_TASK_TYPE_CP, "PROC_CP_PKT \0"}, {PID_UP_UL_HALF_DEAD_LINE_CB, XRAN_TASK_TYPE_UP, "UP_UL_HALF_DEAD_LINE_CB \0"}, {PID_UP_UL_FULL_DEAD_LINE_CB, XRAN_TASK_TYPE_UP, "UP_UL_FULL_DEAD_LINE_CB \0"}, {PID_UP_UL_USER_DEAD_LINE_CB, XRAN_TASK_TYPE_UP, "UP_UL_USER_DEAD_LINE_CB \0"}, - {PID_PROCESS_UP_PKT, XRAN_TASK_TYPE_UP, "PROCESS_UP_PKT \0"}, - {PID_PROCESS_UP_PKT_SRS, XRAN_TASK_TYPE_UP, "PROCESS_UP_PKT_SRS \0"}, + {PID_PROC_UP_PKT_PUSCH, XRAN_TASK_TYPE_UP, "PROC_UP_PKT_PUSCH \0"}, + {PID_PROC_UP_PKT_SRS, XRAN_TASK_TYPE_UP, "PROC_UP_PKT_SRS \0"}, }; #if 1 diff --git a/fhi_lib/app/src/app_ul_bbu_pool_tasks.c b/fhi_lib/app/src/app_ul_bbu_pool_tasks.c index 5990b62..3d32e89 100644 --- a/fhi_lib/app/src/app_ul_bbu_pool_tasks.c +++ b/fhi_lib/app/src/app_ul_bbu_pool_tasks.c @@ -40,12 +40,16 @@ #include "app_bbu_pool.h" #include "app_io_fh_xran.h" #include "xran_compression.h" +#include "xran_frame_struct.h" #include "xran_cp_api.h" #include "xran_fh_o_du.h" #include "xran_mlog_task_id.h" +#include "xran_mlog_lnx.h" extern RuntimeConfig* p_startupConfiguration[XRAN_PORTS_NUM]; static SampleSplitStruct gsUlCfgAxCTaskSplit[MAX_PHY_INSTANCES][MAX_NUM_OF_SF_5G_CTX][MAX_TEST_SPLIT_NUM]; +static SampleSplitStruct gsUlTxAxCTaskSplit[MAX_PHY_INSTANCES][MAX_NUM_OF_SF_5G_CTX][MAX_TEST_SPLIT_NUM]; +extern int32_t first_call; void app_bbu_pool_pre_task_ul_cfg(uint32_t nSubframe, uint16_t nCellIdx, TaskPreGen *pPara) { @@ -83,7 +87,7 @@ void app_bbu_pool_pre_task_ul_cfg(uint32_t nSubframe, uint16_t nCellIdx, TaskPre rte_panic("pXranConf"); if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_A) { - neAxc = pXranConf->neAxc; + neAxc = pXranConf->neAxcUl; nSplitGroup = 1; } else if (pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B) { neAxc = pXranConf->neAxcUl; @@ -135,7 +139,7 @@ void app_bbu_pool_pre_task_ul_cfg(uint32_t nSubframe, uint16_t nCellIdx, TaskPre \param [in] pCookies Task input parameter. \return BBU pool state */ -int32_t app_bbu_pool_task_ul_config(void * pCookies) +int32_t app_bbu_pool_task_ul_config( void * pCookies) { EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; uint16_t nCellIdx = pEventCtrl->nCellIdx; @@ -157,6 +161,7 @@ int32_t app_bbu_pool_task_ul_config(void * pCookies) RuntimeConfig *p_o_xu_cfg = NULL; SampleSplitStruct *pTaskPara = (SampleSplitStruct*)pEventCtrl->pTaskPara; uint16_t nLayerStart = 0, nLayer = 0;//, iSplit =0; + uint8_t mu = pEventCtrl->mu; if(psXranIoIf == NULL) rte_panic("psXranIoIf == NULL"); @@ -225,10 +230,10 @@ int32_t app_bbu_pool_task_ul_config(void * pCookies) } for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { if(((1 << sym_id) & nSymbMask)) { - if ((status = app_io_xran_iq_content_init_cp_rx(p_o_xu_cfg->appMode, pXranConf, + if ((status = app_io_xran_iq_content_init_ul_cp(p_o_xu_cfg->appMode, pXranConf, psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_init_cp_rx"); + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_ul_cp"); } } } @@ -236,14 +241,14 @@ int32_t app_bbu_pool_task_ul_config(void * pCookies) } xran_prepare_cp_ul_slot(xran_port, nSfIdx, nRuCcidx, /*psXranIoIf->num_cc_per_port[xran_port]*/ 1, nSymbMask, nLayerStart, - nLayer, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT); + nLayer, 0, XRAN_NUM_OF_SYMBOL_PER_SLOT, mu); if (mlogVariablesCnt) MLogAddVariables((uint32_t)mlogVariablesCnt, (uint32_t *)mlogVariables, mlog_start); //unlock the next task next_event_unlock(pCookies); - MLogTask(PCID_GNB_UL_CFG_CC0+nCellIdx, mlog_start, MLogTick()); + MLogTask(PCID_NR5G_UL_CFG_CC0+nCellIdx, mlog_start, MLogTick()); return EBBUPOOL_CORRECT; } @@ -263,9 +268,11 @@ app_io_xran_ul_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask int32_t cc_id, ant_id, sym_id, tti; struct xran_io_shared_ctrl *psIoCtrl = NULL; uint32_t xran_max_antenna_nr; + uint64_t mlog_start = MLogXRANTick(); + // uint32_t xran_max_ant_array_elm_nr; // uint32_t xran_max_antenna_nr_prach; - + uint8_t mu = 0, mu_idx; xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); if(xran_port < 0) { @@ -299,28 +306,234 @@ app_io_xran_ul_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask // xran_max_antenna_nr_prach = RTE_MIN(xran_max_antenna_nr, XRAN_MAX_PRACH_ANT_NUM); tti = nSfIdx; - for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { - for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_antenna_nr; ant_id++) { - if(p_o_xu_cfg->appMode == APP_O_DU) { - flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; - } else { - flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++){ + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_antenna_nr; ant_id++) { + if(p_o_xu_cfg->appMode == APP_O_DU) { + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + } else { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_up_rx(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_rx"); + } + } + } } - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if(((1 << sym_id) & nSymMask)) { - if ((status = app_io_xran_iq_content_get_up_rx(p_o_xu_cfg->appMode, pXranConf, + } + } + MLogXRANTask(PID_XRAN_UL_DECOMPRESS, mlog_start, MLogXRANTick()); + + return SUCCESS; +} + +int32_t +app_io_xran_dl_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, + uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + struct xran_io_shared_ctrl *psIoCtrl = NULL; + struct xran_fh_config *pXranConf = NULL; + struct o_xu_buffers * p_iq = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; + xran_status_t status; + int32_t xran_port = 0; + uint32_t nRuCcidx = 0; + int32_t flowId = 0; + int32_t cc_id, ant_id, sym_id, tti; + uint8_t mu = 0, mu_idx; + uint64_t mlog_start = MLogXRANTick(); + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return FAILURE; + } + + psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + if(psIoCtrl == NULL) { + printf("psIoCtrl == NULL\n"); + return FAILURE; + } + + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg == NULL) { + printf("p_o_xu_cfg == NULL\n"); + return FAILURE; + } + + if(p_o_xu_cfg->p_buff) { + p_iq = p_o_xu_cfg->p_buff; + } else { + rte_panic("Error p_o_xu_cfg->p_buff\n"); + } + + pXranConf = &app_io_xran_fh_config[xran_port]; + tti = nSfIdx; + + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++){ + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum); ant_id++) { + if(p_o_xu_cfg->appMode == APP_O_DU) { + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + } else { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_up_rx(p_o_xu_cfg->appMode, pXranConf, psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_rx"); + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_rx"); + } + } + } + } + } + } + MLogXRANTask(PID_XRAN_DL_DECOMPRESS, mlog_start, MLogXRANTick()); + + return SUCCESS; +} + +int32_t +app_io_xran_cp_dl_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, + uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + struct xran_io_shared_ctrl *psIoCtrl = NULL; + struct xran_fh_config *pXranConf = NULL; + struct o_xu_buffers * p_iq = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; + xran_status_t status; + int32_t xran_port = 0; + uint32_t nRuCcidx = 0; + int32_t flowId = 0; + int32_t cc_id, ant_id, sym_id, tti; + uint8_t mu = 0, mu_idx; + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return FAILURE; + } + + psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + if(psIoCtrl == NULL) { + printf("psIoCtrl == NULL\n"); + return FAILURE; + } + + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg == NULL) { + printf("p_o_xu_cfg == NULL\n"); + return FAILURE; + } + + if(p_o_xu_cfg->p_buff) { + p_iq = p_o_xu_cfg->p_buff; + } else { + rte_panic("Error p_o_xu_cfg->p_buff\n"); + } + + pXranConf = &app_io_xran_fh_config[xran_port]; + tti = nSfIdx; + + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++){ + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum); ant_id++) { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_cp_dl(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_cp_dl"); + } } } } } } + return SUCCESS; +} + +int32_t +app_io_xran_cp_ul_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, + uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + struct xran_io_shared_ctrl *psIoCtrl = NULL; + struct xran_fh_config *pXranConf = NULL; + struct o_xu_buffers * p_iq = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; + xran_status_t status; + int32_t xran_port = 0; + uint32_t nRuCcidx = 0; + int32_t flowId = 0; + int32_t cc_id, ant_id, sym_id, tti; + uint8_t mu = 0, mu_idx; + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return FAILURE; + } + + psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + if(psIoCtrl == NULL) { + printf("psIoCtrl == NULL\n"); + return FAILURE; + } + + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg == NULL) { + printf("p_o_xu_cfg == NULL\n"); + return FAILURE; + } + + if(p_o_xu_cfg->p_buff) { + p_iq = p_o_xu_cfg->p_buff; + } else { + rte_panic("Error p_o_xu_cfg->p_buff\n"); + } + + pXranConf = &app_io_xran_fh_config[xran_port]; + tti = nSfIdx; + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++){ + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum); ant_id++) { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_cp_ul(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_cp_ul"); + } + } + } + } + } + } return SUCCESS; } + + int32_t app_io_xran_prach_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) @@ -338,6 +551,8 @@ app_io_xran_prach_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymM uint32_t xran_max_antenna_nr; // uint32_t xran_max_ant_array_elm_nr; uint32_t xran_max_antenna_nr_prach; + uint8_t mu = 0, mu_idx = 0; + uint64_t mlog_start = MLogXRANTick(); xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); @@ -372,22 +587,27 @@ app_io_xran_prach_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymM xran_max_antenna_nr_prach = RTE_MIN(xran_max_antenna_nr, XRAN_MAX_PRACH_ANT_NUM); tti = nSfIdx; - for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { - for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_antenna_nr_prach; ant_id++) { - flowId = xran_max_antenna_nr_prach * cc_id + ant_id; + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++) + { + mu = p_o_xu_cfg->mu_number[mu_idx]; + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_antenna_nr_prach; ant_id++) { + flowId = xran_max_antenna_nr_prach * cc_id + ant_id; - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if(((1 << sym_id) & nSymMask)) { - if ((status = app_io_xran_iq_content_get_up_prach(p_o_xu_cfg->appMode, pXranConf, - psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_prach"); + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_up_prach(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_prach"); + } } } - } + } } } + MLogXRANTask(PID_XRAN_PRACH_DECOMPRESS, mlog_start, MLogXRANTick()); return SUCCESS; } @@ -408,6 +628,8 @@ app_io_xran_srs_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMas struct xran_io_shared_ctrl *psIoCtrl = NULL; uint32_t xran_max_antenna_nr; uint32_t xran_max_ant_array_elm_nr; + uint8_t mu = 0, mu_idx = 0; + uint64_t mlog_start = MLogXRANTick(); xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); @@ -442,24 +664,99 @@ app_io_xran_srs_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMas xran_max_ant_array_elm_nr = RTE_MAX(p_o_xu_cfg->antElmTRx, xran_max_antenna_nr); tti = nSfIdx; - for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { - for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_ant_array_elm_nr; ant_id++) { - flowId = pXranConf->nAntElmTRx*cc_id + ant_id; - for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { - if(((1 << sym_id) & nSymMask)) { - if ((status = app_io_xran_iq_content_get_up_srs(p_o_xu_cfg->appMode, pXranConf, - psXranIoIf, psIoCtrl, p_iq, - cc_id, ant_id, sym_id, tti, flowId)) != 0) { - rte_panic("app_io_xran_iq_content_get_up_srs"); + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++) + { + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_ant_array_elm_nr; ant_id++) { + flowId = pXranConf->nAntElmTRx*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_up_srs(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_srs"); + } } } } } - } + } // for mu_idx } + MLogXRANTask(PID_XRAN_SRS_DECOMPRESS, mlog_start, MLogXRANTick()); return SUCCESS; } +int32_t +app_io_xran_csirs_decomp_func(uint16_t nCellIdx, uint32_t nSfIdx, uint32_t nSymMask, + uint32_t nAntStart, uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum) +{ + xran_status_t status; + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + int32_t xran_port = 0; + uint32_t nRuCcidx = 0; + struct o_xu_buffers * p_iq = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; + int32_t flowId = 0; + struct xran_fh_config *pXranConf = NULL; + int32_t cc_id, ant_id, sym_id, tti; + struct xran_io_shared_ctrl *psIoCtrl = NULL; + uint8_t mu = 0, mu_idx = 0; + uint64_t mlog_start = MLogXRANTick(); + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return FAILURE; + } + + psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + + if(psIoCtrl == NULL) { + printf("psIoCtrl == NULL\n"); + return FAILURE; + } + + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg == NULL) { + printf("p_o_xu_cfg == NULL\n"); + return FAILURE; + } + + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->csirsEnable){ + if(p_o_xu_cfg->p_buff) { + p_iq = p_o_xu_cfg->p_buff; + } else { + rte_panic("Error p_o_xu_cfg->p_buff\n"); + } + + pXranConf = &app_io_xran_fh_config[xran_port]; + tti = nSfIdx; + for(mu_idx = 0 ; mu_idx < p_o_xu_cfg->numMu ; mu_idx++) + { + mu = p_o_xu_cfg->mu_number[mu_idx]; + + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < XRAN_MAX_CSIRS_PORTS; ant_id++) { + flowId = p_o_xu_cfg->nCsiPorts*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_get_up_csirs(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_get_up_csirs"); + } + } + } + } + } + } // for mu_idx + } + MLogXRANTask(PID_XRAN_CSIRS_DECOMPRESS, mlog_start, MLogXRANTick()); + return SUCCESS; +} int32_t app_bbu_pool_task_symX_wakeup(void *pCookies, uint32_t nSym) @@ -472,7 +769,6 @@ app_bbu_pool_task_symX_wakeup(void *pCookies, uint32_t nSym) uint32_t nSymStart = 0; // uint32_t nSymNum = 0; - uint32_t Nrx_antennas; uint16_t nOranCellIdx; struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); @@ -480,6 +776,7 @@ app_bbu_pool_task_symX_wakeup(void *pCookies, uint32_t nSym) int32_t xran_port = 0; uint32_t nRuCcidx = 0; struct xran_fh_config *pXranConf = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; nOranCellIdx = nCellIdx; xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nOranCellIdx, &nRuCcidx); @@ -488,13 +785,19 @@ app_bbu_pool_task_symX_wakeup(void *pCookies, uint32_t nSym) return FAILURE; } - pXranConf = &app_io_xran_fh_config[xran_port]; - Nrx_antennas = pXranConf->neAxcUl; + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg == NULL) { + printf("p_o_xu_cfg == NULL\n"); + return FAILURE; + } - if(Nrx_antennas == 0) - rte_panic("[p %d cell %d] Nrx_antennas == 0\n", xran_port, nCellIdx); + pXranConf = &app_io_xran_fh_config[xran_port]; + // uint32_t Nrx_antennas; + // Nrx_antennas = pXranConf->neAxcUl; + // if(Nrx_antennas == 0) + // rte_panic("[p %d cell %d] Nrx_antennas == 0\n", xran_port, nCellIdx); - nSymStart = 0; + // nSymStart = 0; // nSymNum = XRAN_NUM_OF_SYMBOL_PER_SLOT; switch(nSym) @@ -509,19 +812,27 @@ app_bbu_pool_task_symX_wakeup(void *pCookies, uint32_t nSym) nSymbMask = 0xF80; break; case 13: /* [12,13] */ - nSymbMask = 0x3000; + //nSymbMask = 0x3000; + nSymbMask = 0b11111111111111; + /* UP for O-DU only */ + app_io_xran_ul_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, pXranConf->neAxcUl, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + if(p_o_xu_cfg->appMode == APP_O_RU) + { + /* UP for O-RU only */ + app_io_xran_dl_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, pXranConf->neAxc, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + if(p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + /* CP - DL for O-RU only */ + app_io_xran_cp_dl_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, pXranConf->neAxc, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + /* CP - UL for O-RU only */ + app_io_xran_cp_ul_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, pXranConf->neAxcUl, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + } + app_io_xran_csirs_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, p_o_xu_cfg->nCsiPorts, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + } break; default: rte_panic("nSym %d\n", nSym); } - - if (nSym == 13) /* w/a to run copy to IQ buffer as single short */ - { - nSymbMask = 0b11111111111111; - app_io_xran_ul_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, Nrx_antennas, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); - } - return EBBUPOOL_CORRECT; } @@ -537,7 +848,7 @@ app_bbu_pool_task_sym2_wakeup(void *pCookies) //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_SYM2_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_SYM2_WAKEUP, mlog_start, MLogTick()); return ret; } @@ -553,7 +864,7 @@ app_bbu_pool_task_sym6_wakeup(void *pCookies) //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_SYM6_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_SYM6_WAKEUP, mlog_start, MLogTick()); return ret; } @@ -568,7 +879,7 @@ app_bbu_pool_task_sym11_wakeup(void *pCookies) //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_SYM11_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_SYM11_WAKEUP, mlog_start, MLogTick()); return ret; } @@ -583,7 +894,7 @@ app_bbu_pool_task_sym13_wakeup(void *pCookies) //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_SYM13_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_SYM13_WAKEUP, mlog_start, MLogTick()); return ret; } @@ -602,6 +913,7 @@ app_bbu_pool_task_prach_wakeup(void *pCookies) uint16_t nOranCellIdx; struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + RuntimeConfig *p_o_xu_cfg = NULL; int32_t xran_port = 0; uint32_t nRuCcidx = 0; @@ -623,12 +935,14 @@ app_bbu_pool_task_prach_wakeup(void *pCookies) nSymStart = 0; // nSymNum = XRAN_NUM_OF_SYMBOL_PER_SLOT; nSymbMask = 0b11111111111111; + p_o_xu_cfg = p_startupConfiguration[xran_port]; - app_io_xran_prach_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, Nrx_antennas, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); + if(p_o_xu_cfg->appMode == APP_O_DU) + app_io_xran_prach_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, Nrx_antennas, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_PRACH_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_PRACH_WAKEUP, mlog_start, MLogTick()); return EBBUPOOL_CORRECT; } @@ -639,6 +953,7 @@ app_bbu_pool_task_srs_wakeup(void *pCookies) EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; uint16_t nCellIdx = pEventCtrl->nCellIdx; uint32_t nSfIdx = pEventCtrl->nSlotIdx;// get_ul_sf_idx(pEventCtrl->nSlotIdx, nCellIdx); + RuntimeConfig *p_o_xu_cfg = NULL; uint32_t nSymbMask = 0; uint32_t nSymStart = 0; @@ -666,10 +981,278 @@ app_bbu_pool_task_srs_wakeup(void *pCookies) nSymStart = 0; // nSymNum = XRAN_NUM_OF_SYMBOL_PER_SLOT; nSymbMask = 0b11111111111111; + p_o_xu_cfg = p_startupConfiguration[xran_port]; + + if(p_o_xu_cfg->appMode == APP_O_DU) + ret = app_io_xran_srs_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, Nrx_antennas, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); - ret = app_io_xran_srs_decomp_func(nCellIdx, nSfIdx, nSymbMask, 0, Nrx_antennas, nSymStart, XRAN_NUM_OF_SYMBOL_PER_SLOT); //unlock the next task next_event_unlock(pCookies); - MLogTask(PID_GNB_SRS_WAKEUP, mlog_start, MLogTick()); + MLogTask(PID_TIMING_SRS_WAKEUP, mlog_start, MLogTick()); return ret; } + + +void app_bbu_pool_pre_task_ul_tx(uint32_t nSubframe , uint16_t nCellIdx, TaskPreGen *pPara) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + struct xran_fh_config *pXranConf = NULL; + SampleSplitStruct *pTaskSplitPara; + uint32_t nSfIdx = get_ul_sf_idx(nSubframe, nCellIdx); + uint32_t nCtxNum = get_ul_sf_ctx(nSfIdx, nCellIdx); + uint32_t nRuCcidx = 0; + uint32_t neAxc = 0; + int32_t nLayerPerSplit = 0; + int32_t nTotalLayers = 0; + int32_t nLayerStart = 0; + int32_t nSymbPerSplit = 0; + int32_t nSymbStart = 0; + int32_t nSplitGroup = 0; + int32_t nGroupNum = 0; + int32_t xran_port = 0; + int32_t iTask = 0; + + if(psXranIoIf == NULL) + rte_panic("psXranIoIf == NULL"); + + if(nCellIdx >= MAX_PHY_INSTANCES) + rte_panic("nCellIdx >= MAX_PHY_INSTANCES"); + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return /*EBBUPOOL_CORRECT*/; + } + + pXranConf = &app_io_xran_fh_config[xran_port]; + if(pXranConf == NULL) + rte_panic("pXranConf"); + + neAxc = pXranConf->neAxcUl; + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_A){ + nSplitGroup = 1; + } else if (pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B) { + nSplitGroup = neAxc; + } else + rte_panic("neAxc"); + + nTotalLayers = neAxc; + nLayerPerSplit = nTotalLayers/nSplitGroup; + + /* all symb per eAxC */ + nSymbStart = 0; + nSymbPerSplit = XRAN_NUM_OF_SYMBOL_PER_SLOT; + + pPara->nTaskNum = nSplitGroup; + for (iTask = 0; iTask < (nSplitGroup-1) && iTask < (MAX_TEST_SPLIT_NUM-1); iTask ++) + { + pTaskSplitPara = &(gsUlTxAxCTaskSplit[nCellIdx][nCtxNum][iTask]); + pTaskSplitPara->nSymbStart = nSymbStart; + pTaskSplitPara->nSymbNum = nSymbPerSplit; + pTaskSplitPara->eSplitType = LAYER_SPLIT; + pTaskSplitPara->nSplitIndex = iTask; + pTaskSplitPara->nGroupStart = 0; + pTaskSplitPara->nGroupNum = nGroupNum; + pTaskSplitPara->nLayerStart = nLayerStart; + pTaskSplitPara->nLayerNum = nLayerPerSplit; + pPara->pTaskExePara[iTask] = pTaskSplitPara; + nLayerStart += nLayerPerSplit; + } + pTaskSplitPara = &(gsUlTxAxCTaskSplit[nCellIdx][nCtxNum][iTask]); + pTaskSplitPara->nSymbStart = nSymbStart; + pTaskSplitPara->nSymbNum = nSymbPerSplit; + pTaskSplitPara->eSplitType = LAYER_SPLIT; + pTaskSplitPara->nSplitIndex = iTask; + pTaskSplitPara->nGroupStart = 0; + pTaskSplitPara->nGroupNum = nGroupNum; + pTaskSplitPara->nLayerStart = nLayerStart; + pTaskSplitPara->nLayerNum = nTotalLayers - nLayerStart; + pPara->pTaskExePara[iTask] = pTaskSplitPara; + + return; +} + + +int32_t +app_io_xran_ul_tx_func(uint16_t nCellIdx, uint32_t nSlotIdx, uint32_t nSymMask, uint32_t nAntStart, uint32_t nAntNum, uint8_t mu) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + struct xran_fh_config *pXranConf = NULL; + struct xran_io_shared_ctrl *psIoCtrl = NULL; + struct o_xu_buffers *p_iq = NULL; + RuntimeConfig *p_o_xu_cfg = NULL; + xran_status_t status; + int32_t xran_max_antenna_nr = 0; + int32_t xran_max_antenna_nr_prach = 0; + int32_t cc_id = 0, ant_id = 0, sym_id = 0, tti = 0; + uint32_t nSymNum = XRAN_NUM_OF_SYMBOL_PER_SLOT; + uint32_t nSymStart = 0; + uint32_t nRuCcidx = 0; + int32_t xran_port = 0; + int32_t flowId = 0; + uint16_t phyInstance = nCellIdx; + int32_t Nrx_antennas; + + uint64_t mlog_start; + mlog_start = MLogTick(); + + if(psXranIoIf == NULL) + rte_panic("psXranIoIf == NULL"); + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0 || xran_port >= XRAN_PORTS_NUM) { + printf("incorrect xran_port\n"); + return EBBUPOOL_CORRECT; + } + + psIoCtrl = app_io_xran_if_ctrl_get(xran_port); + if(psIoCtrl == NULL) + rte_panic("psIoCtrl"); + + pXranConf = &app_io_xran_fh_config[xran_port]; + if(pXranConf == NULL) + rte_panic("pXranConf"); + + p_o_xu_cfg = p_startupConfiguration[xran_port]; + if(p_o_xu_cfg->p_buff) { + p_iq = p_o_xu_cfg->p_buff; + } else { + rte_panic("Error p_o_xu_cfg->p_buff\n"); + } + + xran_max_antenna_nr = RTE_MAX(p_o_xu_cfg->numAxc, p_o_xu_cfg->numUlAxc); + // xran_max_ant_array_elm_nr = RTE_MAX(p_o_xu_cfg->antElmTRx, xran_max_antenna_nr); + xran_max_antenna_nr_prach = RTE_MIN(xran_max_antenna_nr, XRAN_MAX_PRACH_ANT_NUM); + Nrx_antennas = RTE_MIN(pXranConf->neAxcUl, XRAN_MAX_PRACH_ANT_NUM); + + uint8_t num_eAxc = 0; + uint8_t num_eAxc_prach = 0; + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B) + num_eAxc = p_o_xu_cfg->numUlAxc; + else + num_eAxc = p_o_xu_cfg->numAxc; + + num_eAxc_prach = ((num_eAxc > XRAN_MAX_PRACH_ANT_NUM)? XRAN_MAX_PRACH_ANT_NUM : num_eAxc); + + if(Nrx_antennas == 0) + rte_panic("Nrx_antennas == 0\n"); + + tti = nSlotIdx; + + //Only for UL transmission + for(cc_id = nRuCcidx; cc_id < psXranIoIf->num_cc_per_port[xran_port]; cc_id++) { + if (cc_id >= XRAN_MAX_SECTOR_NR) { + rte_panic("cell id %d exceeding max number", cc_id); + } + //UP IQ content init + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < xran_max_antenna_nr; ant_id++) { + if(p_o_xu_cfg->appMode == APP_O_DU) { + flowId = p_o_xu_cfg->numAxc * cc_id + ant_id; + } else { + flowId = p_o_xu_cfg->numUlAxc * cc_id + ant_id; + } + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_init_up_tx(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_tx"); + } + } + } + } + //SRS IQ content init + if(pXranConf->ru_conf.xranCat == XRAN_CATEGORY_B && p_o_xu_cfg->enableSrs && nAntStart == 0) { //required to avoid repeated SRS transmission with different splitgroups + for(ant_id = 0; ant_id < p_o_xu_cfg->antElmTRx && ant_id < XRAN_MAX_ANT_ARRAY_ELM_NR; ant_id++) { + flowId = p_o_xu_cfg->antElmTRx*cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if ((status = app_io_xran_iq_content_init_up_srs(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_srs"); + } + } + } + } + } + /* Only RU needs to send PRACH I/Q */ + if(p_o_xu_cfg->perMu[mu].prachEnable) { + for(ant_id = nAntStart; ant_id < (nAntStart + nAntNum) && ant_id < num_eAxc_prach ; ant_id++) { + flowId = xran_max_antenna_nr_prach * cc_id + ant_id; + for(sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + if(((1 << sym_id) & nSymMask)) { + if(xran_fs_get_symbol_type(xran_port, cc_id, tti, sym_id, mu) == XRAN_SYMBOL_TYPE_UL + || xran_fs_get_symbol_type(xran_port, cc_id, tti, sym_id, mu) == XRAN_SYMBOL_TYPE_FDD) { + //add further prach slot check to reduce unecessary initialization + if ((status = app_io_xran_iq_content_init_up_prach(p_o_xu_cfg->appMode, pXranConf, + psXranIoIf, psIoCtrl, p_iq, + cc_id, ant_id, sym_id, tti, flowId, mu)) != 0) { + rte_panic("app_io_xran_iq_content_init_up_prach"); + } + } + } + } + } + } + } + xran_prepare_up_ul_tx_sym(xran_port, nSlotIdx, nRuCcidx, 1, nSymMask, nAntStart, nAntNum, nSymStart, nSymNum, mu); + + MLogTask(PCID_FH_UL_IQ_DECOMPRESS_CC0 + phyInstance, mlog_start, MLogTick()); + return 0; +} + +int32_t app_bbu_pool_task_ul_tx(void *pCookies) +{ + struct bbu_xran_io_if *psXranIoIf = app_io_xran_if_get(); + EventCtrlStruct *pEventCtrl = (EventCtrlStruct *)pCookies; + SampleSplitStruct *pTaskPara = (SampleSplitStruct*)pEventCtrl->pTaskPara; + uint16_t nCellIdx = pEventCtrl->nCellIdx; + uint32_t nSfIdx = get_ul_sf_idx(pEventCtrl->nSlotIdx, nCellIdx); + uint16_t nLayerStart = 0, nLayer = 0; + int32_t nSymbMask = 0b11111111111111; + uint32_t nRuCcidx = 0; + int32_t xran_port = 0; + uint8_t mu = pEventCtrl->mu; + uint16_t iSplit = 0; + + uint32_t mlogVariablesCnt, mlogVariables[50]; + uint64_t mlog_start = MLogTick(); + + if(psXranIoIf == NULL) + rte_panic("psXranIoIf == NULL"); + + xran_port = app_io_xran_map_cellid_to_port(psXranIoIf, nCellIdx, &nRuCcidx); + if(xran_port < 0) { + printf("incorrect xran_port\n"); + return EBBUPOOL_CORRECT; + } + + if(LAYER_SPLIT == pTaskPara->eSplitType) { + nLayerStart = pTaskPara->nLayerStart; + nLayer = pTaskPara->nLayerNum; + iSplit = pTaskPara->nSplitIndex; + } else { + rte_panic("LAYER_SPLIT == pTaskPara->eSplitType"); + } + app_io_xran_ul_tx_func(pEventCtrl->nCellIdx, nSfIdx, /*0x3FFF*/ nSymbMask, nLayerStart, nLayer, mu); + + mlogVariablesCnt = 0; + mlogVariables[mlogVariablesCnt++] = 0xefefefef; + mlogVariables[mlogVariablesCnt++] = nCellIdx; + mlogVariables[mlogVariablesCnt++] = pEventCtrl->nSlotIdx; + mlogVariables[mlogVariablesCnt++] = 0; + mlogVariables[mlogVariablesCnt++] = XRAN_NUM_OF_SYMBOL_PER_SLOT; + mlogVariables[mlogVariablesCnt++] = nLayerStart; + mlogVariables[mlogVariablesCnt++] = nLayer; + mlogVariables[mlogVariablesCnt++] = iSplit; + mlog_start = MLogTick(); + if (mlogVariablesCnt) + MLogAddVariables((uint32_t)mlogVariablesCnt, (uint32_t *)mlogVariables, mlog_start); + MLogTask(PCID_FH_UL_TX_CC0+nCellIdx, mlog_start, MLogTick()); + + //unlock the next task + next_event_unlock(pCookies); + + return EBBUPOOL_CORRECT; +} diff --git a/fhi_lib/app/src/common.c b/fhi_lib/app/src/common.c index e3135c7..3859469 100644 --- a/fhi_lib/app/src/common.c +++ b/fhi_lib/app/src/common.c @@ -31,14 +31,16 @@ #include "xran_mlog_lnx.h" +//#define DEBUG_GEN_BIN_FILES /**< enable write IQ files as .bin along with .txt */ + extern enum app_state state; struct o_xu_buffers* p_o_xu_buff[XRAN_PORTS_NUM] = {NULL, NULL, NULL, NULL}; // F1 Tables 38.101-1 Table 5.3.2-1. Maximum transmission bandwidth configuration NRB -uint16_t nLteNumRbsPerSymF1[1][4] = +uint16_t nLteNumRbsPerSymF1[1][6] = { - // 5MHz 10MHz 15MHz 20 MHz - {25, 50, 75, 100}, // Numerology 0 (15KHz) + // 1.4MHz 3MHz 5MHz 10MHz 15MHz 20 MHz + {6, 15, 25, 50, 75, 100}, // Numerology 0 (15KHz) }; // F1 Tables 38.101-1 Table 5.3.2-1. Maximum transmission bandwidth configuration NRB @@ -46,8 +48,8 @@ uint16_t nNumRbsPerSymF1[3][13] = { // 5MHz 10MHz 15MHz 20 MHz 25 MHz 30 MHz 40 MHz 50MHz 60 MHz 70 MHz 80 MHz 90 MHz 100 MHz {25, 52, 79, 106, 133, 160, 216, 270, 0, 0, 0, 0, 0}, // Numerology 0 (15KHz) - {11, 24, 38, 51, 65, 78, 106, 133, 162, 0, 217, 245, 273}, // Numerology 1 (30KHz) - {0, 11, 18, 24, 31, 38, 51, 65, 79, 0, 107, 121, 135} // Numerology 2 (60KHz) + {11, 24, 38, 51, 65, 78, 106, 133, 162, 189, 217, 245, 273}, // Numerology 1 (30KHz) + {0, 11, 18, 24, 31, 38, 51, 65, 79, 93, 107, 121, 135} // Numerology 2 (60KHz) }; // F2 Tables 38.101-2 Table 5.3.2-1. Maximum transmission bandwidth configuration NRB @@ -59,22 +61,25 @@ uint16_t nNumRbsPerSymF2[2][4] = }; // 38.211 - Table 4.2.1 -uint16_t nSubCarrierSpacing[5] = +uint16_t nSubCarrierSpacing[6] = { 15, // mu = 0 30, // mu = 1 60, // mu = 2 120, // mu = 3 - 240 // mu = 4 + 240, // mu = 4 -Not supported + 15, // for NB-IOT }; // TTI interval in us (slot duration) -uint16_t nTtiInterval[4] = +uint16_t nTtiInterval[6] = { 1000, // mu = 0 500, // mu = 1 250, // mu = 2 125, // mu = 3 + 0, // mu = 4, Not supported 62.5 us TTI + 1000, // mu = 0, using this index for Nb-IOT }; @@ -106,7 +111,7 @@ float g_DlRate[XRAN_MAX_SECTOR_NR] = {0.0}; uint32_t app_xran_get_tti_interval(uint8_t nMu) { - if (nMu < 4) + if (nMu < XRAN_MAX_NUM_MU) { return nTtiInterval[nMu]; } @@ -153,24 +158,34 @@ uint16_t app_xran_get_num_rbs(uint8_t ranTech, uint32_t nNumerology, uint32_t nB { uint32_t error = 1; uint16_t numRBs = 0; + if(nNumerology == XRAN_NBIOT_MU) /*NB-IOt test case: use configs for mu = 0*/ + nNumerology = 0; if (ranTech == XRAN_RAN_LTE) { switch(nBandwidth) { + case PHY_BW_1_4_0_MHZ: + numRBs = nLteNumRbsPerSymF1[0][0]; + error = 0; + break; + case PHY_BW_3_0_MHZ: + numRBs = nLteNumRbsPerSymF1[0][1]; + error = 0; + break; case PHY_BW_5_0_MHZ: - numRBs = nLteNumRbsPerSymF1[nNumerology][0]; + numRBs = nLteNumRbsPerSymF1[0][2]; error = 0; break; case PHY_BW_10_0_MHZ: - numRBs = nLteNumRbsPerSymF1[nNumerology][1]; + numRBs = nLteNumRbsPerSymF1[0][3]; error = 0; break; case PHY_BW_15_0_MHZ: - numRBs = nLteNumRbsPerSymF1[nNumerology][2]; + numRBs = nLteNumRbsPerSymF1[0][4]; error = 0; break; case PHY_BW_20_0_MHZ: - numRBs = nLteNumRbsPerSymF1[nNumerology][3]; + numRBs = nLteNumRbsPerSymF1[0][5]; error = 0; break; default: @@ -269,6 +284,67 @@ uint16_t app_xran_get_num_rbs(uint8_t ranTech, uint32_t nNumerology, uint32_t nB break; } } + else if (nNumerology < 3) + { + switch(nBandwidth) + { + case PHY_BW_5_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][0]; + error = 0; + break; + case PHY_BW_10_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][1]; + error = 0; + break; + case PHY_BW_15_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][2]; + error = 0; + break; + case PHY_BW_20_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][3]; + error = 0; + break; + case PHY_BW_25_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][4]; + error = 0; + break; + case PHY_BW_30_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][5]; + error = 0; + break; + case PHY_BW_40_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][6]; + error = 0; + break; + case PHY_BW_50_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][7]; + error = 0; + break; + case PHY_BW_60_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][8]; + error = 0; + break; + case PHY_BW_70_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][9]; + error = 0; + break; + case PHY_BW_80_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][10]; + error = 0; + break; + case PHY_BW_90_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][11]; + error = 0; + break; + case PHY_BW_100_0_MHZ: + numRBs = nNumRbsPerSymF1[nNumerology][12]; + error = 0; + break; + default: + error = 1; + break; + } + } } @@ -355,7 +431,7 @@ int32_t app_xran_set_slot_type(uint32_t nPhyInstanceId, uint32_t nFrameDuplexTyp { uint32_t nSlotNum, nSymNum, nVal, i; uint32_t numDlSym, numUlSym, numGuardSym; - uint32_t numDlSlots = 0, numUlSlots = 0, numSpDlSlots = 0, numSpUlSlots = 0, numSpSlots = 0; + uint32_t numDlSlots = 0, numUlSlots = 0, numSpDlSlots = 0, numSpUlSlots = 0;// numSpSlots = 0; char sSlotPattern[XRAN_SLOT_TYPE_LAST][10] = {"IN\0", "DL\0", "UL\0", "SP\0", "FD\0"}; // nPhyInstanceId Carrier ID @@ -422,7 +498,7 @@ int32_t app_xran_set_slot_type(uint32_t nPhyInstanceId, uint32_t nFrameDuplexTyp else { g_SlotType[nPhyInstanceId][nSlotNum] = XRAN_SLOT_TYPE_SP; - numSpSlots++; + //numSpSlots++; if (numDlSym) { @@ -510,6 +586,9 @@ int32_t app_xran_get_slot_type(int32_t nCellIdx, int32_t nSlotdx, int32_t nType) void sys_save_buf_to_file(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num) { +#ifndef DEBUG_GEN_BIN_FILES + return ; +#endif if (size) { if (filename && bufname) @@ -523,11 +602,10 @@ void sys_save_buf_to_file(char *filename, char *bufname, unsigned char *pBuffer, } else { - uint32_t num; - num = fwrite(pBuffer, buffers_num, size, file); + fwrite(pBuffer, buffers_num, size, file); fflush(file); fclose(file); - printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, size, num); + // printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, size, num); } printf(" \n"); } @@ -570,12 +648,12 @@ int sys_load_file_to_buff(char *filename, char *bufname, unsigned char *pBuffer, if ((file_size > size) || (file_size == 0)) file_size = size; - printf("Reading IQ samples from file: File Size: %d [Buffer Size: %d]\n", file_size, size); + // printf("Reading IQ samples from file: File Size: %d [Buffer Size: %d]\n", file_size, size); num = fread(pBuffer, buffers_num, size, file); fflush(file); fclose(file); - printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, file_size, num); + // printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, file_size, num); } printf(" \n"); @@ -593,7 +671,7 @@ int sys_load_file_to_buff(char *filename, char *bufname, unsigned char *pBuffer, } -void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num) +void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num, unsigned int bitwidth) { unsigned int i; int ret = 0; @@ -614,36 +692,55 @@ void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuf } else { - uint32_t num = 0; + // uint32_t num = 0; - signed short *ptr = (signed short*)pBuffer; - for (i = 0; i < (size/((unsigned int)sizeof(signed short) /** 2 * 2 * 2*/)); i = i + 2) + if(bitwidth == 2) { -#ifndef CSCOPE_DEBUG - ret = fprintf(file,"%d %d\n", ptr[i], ptr[i + 1]); -#else - ret = fprintf(file,"%d %d ", ptr[i], ptr[i + 1]); - /* I data => Ramp data, from 1 to 792. - Q data => Contains time information of the current symbol: - Bits [15:14] = Antenna-ID - Bits [13:12] = “00” - Bits [11:8] = Subframe-ID - Bits [7:4] = Slot-ID - Bits [3:0] = Symbol-ID */ - fprintf(file, "0x%04x: ant %d Subframe-ID %d Slot-ID %d Symbol-ID %d\n", - ptr[i + 1], (ptr[i + 1]>>14) & 0x3, (ptr[i + 1]>>8) & 0xF, (ptr[i + 1]>>4) & 0xF, (ptr[i + 1]>>0) & 0xF); -#endif - if (ret < 0) + signed short *ptr = (signed short*)pBuffer; + for (i = 0; i < (size/((unsigned int)sizeof(signed short) /** 2 * 2 * 2*/)); i = i + 2) + { + #ifndef CSCOPE_DEBUG + ret = fprintf(file,"%d %d\n", ptr[i], ptr[i + 1]); + #else + ret = fprintf(file,"%d %d ", ptr[i], ptr[i + 1]); + /* I data => Ramp data, from 1 to 792. + Q data => Contains time information of the current symbol: + Bits [15:14] = Antenna-ID + Bits [13:12] = �00� + Bits [11:8] = Subframe-ID + Bits [7:4] = Slot-ID + Bits [3:0] = Symbol-ID */ + fprintf(file, "0x%04x: ant %d Subframe-ID %d Slot-ID %d Symbol-ID %d\n", + ptr[i + 1], (ptr[i + 1]>>14) & 0x3, (ptr[i + 1]>>8) & 0xF, (ptr[i + 1]>>4) & 0xF, (ptr[i + 1]>>0) & 0xF); + #endif + if (ret < 0) + { + printf("fprintf %d\n", ret); + break; + } + //num++; + } + } + else if(bitwidth == 1) + { + int8_t *ptr = (int8_t *)pBuffer; + for (i = 0; i < size/2; i += 2) { - printf("fprintf %d\n", ret); - fclose(file); - break; + ret = fprintf(file,"%d %d\n", ptr[i], ptr[i + 1]); + if (ret < 0) + { + printf("fprintf %d\n", ret); + break; + } + // num++; } - num++; } + else + printf("Invalid bitwidth configuration! [%d]\n", bitwidth); + fflush(file); fclose(file); - printf("from addr (0x%lx) size (%d) IQ num (%d)", (uint64_t)pBuffer, size, num); + // printf("from addr (0x%lx) size (%d) IQ num (%d)", (uint64_t)pBuffer, size, num); } printf(" \n"); } @@ -658,3 +755,31 @@ void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuf } } +void app_print_xran_antenna_stats(uint8_t app_mode, int o_xu_id, struct xran_common_counters *x_counters) +{ + + uint8_t ant_id; + uint8_t ant_id_max = 8 ; + /** UP Stats **/ + printf("[%s Stats:]\n",(app_mode == APP_O_DU) ? "PUSCH" : "PDSCH"); + + for( ant_id = 0 ; ant_id < ant_id_max ; ant_id++) + { + printf("Ant-%hhu\t\t",ant_id); + + if(ant_id+1 == ant_id_max) + printf("\n"); + } + + for(ant_id = 0 ; ant_id < ant_id_max ; ant_id++) + { + printf("%lu\t\t",x_counters->rx_pusch_packets[ant_id]); + + if(ant_id+1 == ant_id_max) + printf("\n"); + } + + printf("\n"); + + return; +} diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h index ac5f471..3819d8e 100644 --- a/fhi_lib/app/src/common.h +++ b/fhi_lib/app/src/common.h @@ -28,7 +28,7 @@ #include #include -#define VERSIONX "oran_f_release_v1.0" +#define VERSIONX "#DIRTY#" #define APP_O_DU 0 #define APP_O_RU 1 @@ -41,26 +41,21 @@ enum app_state enum nRChBwOptions { - PHY_BW_5_0_MHZ = 5, PHY_BW_10_0_MHZ = 10, PHY_BW_15_0_MHZ = 15, PHY_BW_20_0_MHZ = 20, PHY_BW_25_0_MHZ = 25, + PHY_BW_1_4_0_MHZ = 1, PHY_BW_3_0_MHZ = 3, PHY_BW_5_0_MHZ = 5, PHY_BW_10_0_MHZ = 10, PHY_BW_15_0_MHZ = 15, PHY_BW_20_0_MHZ = 20, PHY_BW_25_0_MHZ = 25, PHY_BW_30_0_MHZ = 30, PHY_BW_40_0_MHZ = 40, PHY_BW_50_0_MHZ = 50, PHY_BW_60_0_MHZ = 60, PHY_BW_70_0_MHZ = 70, PHY_BW_80_0_MHZ = 80, PHY_BW_90_0_MHZ = 90, PHY_BW_100_0_MHZ = 100, PHY_BW_200_0_MHZ = 200, PHY_BW_400_0_MHZ = 400 }; -#define N_SC_PER_PRB 12 +#define N_SC_PER_PRB(isNb375) (isNb375 ? 48 : 12) #define N_SYM_PER_SLOT 14 #define MAX_ANT_CARRIER_SUPPORTED (XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR) #define MAX_ANT_CARRIER_SUPPORTED_CAT_B (XRAN_MAX_SECTOR_NR*XRAN_MAX_ANT_ARRAY_ELM_NR) - -#define SUBFRAME_DURATION_US 1000 +#define MAX_CSIRS_PORTS_SUPPORTED (XRAN_MAX_SECTOR_NR*XRAN_MAX_CSIRS_PORTS) #define SUBFRAMES_PER_SYSTEMFRAME 10 -#define IQ_PLAYBACK_BUFFER_BYTES (XRAN_NUM_OF_SLOT_IN_TDD_LOOP*N_SYM_PER_SLOT*XRAN_MAX_PRBS*N_SC_PER_PRB*4L) +#define IQ_PLAYBACK_BUFFER_BYTES(isNb375) (XRAN_NUM_OF_SLOT_IN_TDD_LOOP*N_SYM_PER_SLOT*XRAN_MAX_PRBS*N_SC_PER_PRB(isNb375)*4L) /* PRACH data samples are 32 bits wide, 16bits for I and 16bits for Q. Each packet contains 840 samples for long sequence or 144 for short sequence. The payload length is 840*16*2/8 octets.*/ -#ifdef FCN_1_2_6_EARLIER -#define PRACH_PLAYBACK_BUFFER_BYTES (144*4L) -#else #define PRACH_PLAYBACK_BUFFER_BYTES (840*4L) -#endif #ifdef _DEBUG #define iAssert(p) if(!(p)){fprintf(stderr,\ @@ -70,18 +65,9 @@ enum nRChBwOptions #define iAssert(p) #endif /* _DEBUG */ -/**< all the buffers allocated for O-XU */ -struct o_xu_buffers { - int iq_playback_buffer_size_dl; - int iq_playback_buffer_size_ul; - - int iq_bfw_buffer_size_dl; - int iq_bfw_buffer_size_ul; - - int iq_srs_buffer_size_ul; - - int numSlots; /**< number of slots in IQ vector */ +typedef struct +{ int16_t *p_tx_play_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_play_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; @@ -93,6 +79,9 @@ struct o_xu_buffers { int32_t tx_srs_play_buffer_size[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; int32_t tx_srs_play_buffer_position[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; + int16_t *p_tx_csirs_play_buffer[MAX_CSIRS_PORTS_SUPPORTED]; + int32_t tx_csirs_play_buffer_size[MAX_CSIRS_PORTS_SUPPORTED]; + int16_t *p_rx_log_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_log_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; @@ -102,47 +91,74 @@ struct o_xu_buffers { int16_t *p_srs_log_buffer[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; int32_t srs_log_buffer_size[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; + int16_t *p_csirs_log_buffer[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; + int32_t csirs_log_buffer_size[MAX_ANT_CARRIER_SUPPORTED_CAT_B]; + int16_t *p_tx_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; int16_t *p_rx_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; -/* beamforming weights for UL (O-DU) */ + /* beamforming weights for UL (O-DU) */ int16_t *p_tx_dl_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_dl_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; int16_t *p_tx_dl_bfw_log_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_dl_bfw_log_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; -/* beamforming weights for UL (O-DU) */ + /* beamforming weights for UL (O-DU) */ int16_t *p_tx_ul_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_ul_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; int16_t *p_tx_ul_bfw_log_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t tx_ul_bfw_log_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; -/* beamforming weights for UL (O-RU) */ + /* beamforming weights for UL (O-RU) */ int16_t *p_rx_dl_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_dl_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_dl_bfw_buffer_position[MAX_ANT_CARRIER_SUPPORTED]; -/* beamforming weights for UL (O-RU) */ + /* beamforming weights for UL (O-RU) */ int16_t *p_rx_ul_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_ul_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED]; int32_t rx_ul_bfw_buffer_position[MAX_ANT_CARRIER_SUPPORTED]; + +} buffers_per_mu; + +/**< all the buffers allocated for O-XU */ +struct o_xu_buffers { + int iq_playback_buffer_size_dl; + int iq_playback_buffer_size_ul; + + int iq_bfw_buffer_size_dl; + int iq_bfw_buffer_size_ul; + + int iq_srs_buffer_size_ul; + int iq_csirs_buffer_size_dl; + + int iq_dl_bit; + int iq_ul_bit; + int iq_bfw_dl_bit; + int iq_bfw_ul_bit; + int iq_srs_bit; + int iq_csirs_bit; + int iq_prach_bit; + + int numSlots; /**< number of slots in IQ vector */ + buffers_per_mu buff_perMu[XRAN_MAX_NUM_MU]; }; extern struct o_xu_buffers* p_o_xu_buff[XRAN_PORTS_NUM]; -void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num); +void sys_save_buf_to_file_txt(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num, unsigned int bitwidth); void sys_save_buf_to_file(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num); int sys_load_file_to_buff(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num); uint32_t app_xran_get_scs(uint8_t nMu); uint16_t app_xran_get_num_rbs(uint8_t ranTech, uint32_t nNumerology, uint32_t nBandwidth, uint32_t nAbsFrePointA); uint32_t app_xran_cal_nrarfcn(uint32_t nCenterFreq); -int32_t app_xran_set_slot_type(uint32_t nPhyInstanceId, uint32_t nFrameDuplexType, +int32_t app_xran_set_slot_type(uint32_t nPhyInstanceId, uint32_t nFrameDuplexType, uint32_t nTddPeriod, struct xran_slot_config *psSlotConfig); uint32_t app_xran_get_tti_interval(uint8_t nMu); - +void app_print_xran_antenna_stats(uint8_t app_mode, int o_xu_id, struct xran_common_counters *x_counters); #endif /*_XRAN_APP_COMMON_H_*/ diff --git a/fhi_lib/app/src/config.c b/fhi_lib/app/src/config.c index 14fb3e8..97ad85c 100644 --- a/fhi_lib/app/src/config.c +++ b/fhi_lib/app/src/config.c @@ -39,6 +39,10 @@ #define KEY_XRAN_MODE "xranMode" #define KEY_XRAN_TECH "xranRanTech" #define KEY_MU_NUMBER "mu" +#define KEY_UL_SCS "nbIotUlScs" +#define KEY_FREQ_OFFSET "freqOffset" +#define KEY_EAXC_OFFSET "eAxcOffset" +#define KEY_MIXED_NUM_ENABLE "mixedNumEnable" #define KEY_NDLABSFREPOINTA "nDLAbsFrePointA" #define KEY_NULABSFREPOINTA "nULAbsFrePointA" #define KEY_NDLBANDWIDTH "nDLBandwidth" @@ -70,6 +74,13 @@ #define KEY_OWDM_MEAS_ID "oXuOwdmMeasId" #define KEY_OWDM_EN "oXuOwdmEnabled" #define KEY_OWDM_PL_LENGTH "oXuOwdmPlLength" + +/* Config for IEEE 802.1Q CFM LBM/LBR */ +#define KEY_LBM_ENABLE "lbmEnable" +#define KEY_LBM_NUM_RETRANSMISSIONS "NumRetransmissions" +#define KEY_LBR_TIMEOUT "lbrTimeout" +#define KEY_LBM_PERIODICITY "lbmPeriodicity" + #define KEY_CC_PER_PORT_NUM "ccNum" #define KEY_ANT_NUM "antNum" #define KEY_UL_ANT_NUM "antNumUL" @@ -83,7 +94,9 @@ #define KEY_FILE_ULBFWUE "UlBfwUe" #define KEY_FILE_O_XU_CFG "oXuCfgFile" +#define KEY_NUM_SECMU "numSecMu" #define KEY_FILE_O_XU_BBU_CFG "oXuBbuCfgFile" +#define KEY_FILE_SEC_NUM "oXuSecNumFile" #define KEY_O_XU_PCIE_BUS "PciBusAddoXu" #define KEY_O_XU_REM_MAC "oXuRem" #define KEY_DL_CP_BURST "dlCpProcBurst" @@ -91,17 +104,18 @@ #define KEY_FILE_ULSRS "antSrsC" +#define KEY_FILE_DLCSIRS "csirsAntC" #define KEY_TTI_PERIOD "ttiPeriod" -#define KEY_MTU_SIZE "MTUSize" +#define KEY_MTU_SIZE "MTUSize" #define KEY_MAIN_CORE "mainCore" -#define KEY_IO_CORE "ioCore" -#define KEY_IO_WORKER "ioWorker" +#define KEY_IO_CORE "ioCore" +#define KEY_IO_WORKER "ioWorker" #define KEY_IO_WORKER_64_127 "ioWorker_64_127" -#define KEY_IO_SLEEP "ioSleep" -#define KEY_SYSTEM_CORE "systemCore" -#define KEY_IOVA_MODE "iovaMode" +#define KEY_IO_SLEEP "ioSleep" +#define KEY_SYSTEM_CORE "systemCore" +#define KEY_IOVA_MODE "iovaMode" #define KEY_DPDK_MEM_SZ "dpdkMemorySize" #define KEY_INSTANCE_ID "instanceId" @@ -116,14 +130,27 @@ #define KEY_FILE_SLOT_TX "SlotNumTx" #define KEY_FILE_SLOT_RX "SlotNumRx" -#define KEY_PRACH_ENABLE "rachEnable" +#define KEY_PRACH_ENABLE "rachEnable" + +/*NPRACH parameters*/ +#define KEY_NPRACH_FORMAT "nprachformat" +#define KEY_NPRACH_PERIOD "periodicity" +#define KEY_NPRACH_STARTTIME "startTime" +#define KEY_NPRACH_SUB_OFFSET "suboffset" +#define KEY_NUM_SUBCARRIERS "numSubCarriers" +#define KEY_NUM_REP "nRep" + +#define KEY_DROP_PACKETS_UP "dropPacketsUp" #define KEY_SRS_ENABLE "srsEnable" +#define KEY_CSIRS_ENABLE "csirsEnable" +#define KEY_CSI_PORTS "nCSIports" + #define KEY_PUSCH_MASK_ENABLE "puschMaskEnable" #define KEY_PUSCH_MASK_SLOT "puschMaskSlot" #define KEY_PRACH_CFGIDX "prachConfigIndex" #define KEY_PRACH_CFGIDX_LTE "prachConfigIndexLTE" -#define KEY_SRS_SYM_IDX "srsSym" +#define KEY_SRS_SYM_IDX "srsSym" #define KEY_SRS_SLOT "srsSlot" #define KEY_SRS_NDM_OFFSET "srsNdmOffset" #define KEY_SRS_NDM_TXDUR "srsNdmTxDuration" @@ -135,9 +162,10 @@ #define KEY_HTONS_SWAP "nebyteorderswap" #define KEY_COMPRESSION "compression" #define KEY_COMP_TYPE "compType" -#define KEY_PRACH_COMPMETH "prachCompMethod" -#define KEY_PRACH_IQ "prachiqWidth" +#define KEY_PRACH_COMPMETH "prachCompMethod" +#define KEY_PRACH_IQ "prachiqWidth" +#define KEY_PUSCH_UP_MULTI_SECTION "PuschUpMultiSec" #define KEY_BFW_NUM "totalBFWeights" @@ -159,10 +187,10 @@ #define KEY_TA4_MIN "Ta4_min" #define KEY_TA4_MAX "Ta4_max" +/*Time by which symbol should be transmitted in advanced in microseconds*/ +#define KEY_TX_ADVANCED "adv_tx_time" #define KEY_CP_ENABLE "CPenable" -#define KEY_CP_VTAG "c_plane_vlan_tag" -#define KEY_UP_VTAG "u_plane_vlan_tag" #define KEY_DEBUG_STOP "debugStop" #define KEY_DEBUG_STOP_CNT "debugStopCount" #define KEY_BBDEV_MODE "bbdevMode" @@ -183,7 +211,11 @@ #define KEY_PRBELEM_UL_ANT_M "PrbElemUlAntCMask" #define KEY_EXTBFW_UL "ExtBfwUl" #define KEY_NPRBELEM_SRS "nPrbElemSrs" +#define KEY_NPRBELEM_CSIRS "nPrbElemCsirs" #define KEY_PRBELEM_SRS "PrbElemSrs" +#define KEY_PRBELEM_CSIRS "PrbElemCsirs" +#define KEY_PRBELEM_SRS_CC_M "PrbElemSrsCCMask" +#define KEY_PRBELEM_SRS_ANT_M "PrbElemSrsAntCMask" #define KEY_MAX_SEC_SYM "max_sections_per_symbol" #define KEY_MAX_SEC_SLOT "max_sections_per_slot" #define KEY_PRBMAP_BY_SYMB "RunSlotPrbMapBySymbolEna" @@ -225,9 +257,12 @@ static void trim(char* input) static int fillConfigStruct(RuntimeConfig *config, const char *key, const char *value) { - static uint32_t section_idx_dl = 0; - static uint32_t section_idx_ul = 0; - static uint32_t section_idx_srs = 0; + static uint32_t section_idx_dl = 0; + static uint32_t section_idx_ul = 0; + static uint8_t section_idx_srs = 0; + static uint8_t section_idx_csirs = 0; + static int8_t configForMu =-1; + // static uint8_t mu_idx = 0; if (strcmp(key, KEY_APP_MODE) == 0){ config->appMode = atoi(value); @@ -238,8 +273,15 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * } else if (strcmp(key, KEY_CC_PER_PORT_NUM) == 0) { config->numCC= atoi(value); } else if (strcmp(key, KEY_MU_NUMBER) == 0) { - config->mu_number= atoi(value); - printf("mu_number: %d\n",config->mu_number); + configForMu = atoi(value); + config->mu_number[config->numMu++] = configForMu; + } else if (strcmp(key, KEY_UL_SCS) == 0) { + config->perMu[configForMu].nbIotUlScs = atoi(value); + } else if (strcmp(key, KEY_FREQ_OFFSET) == 0) { + config->perMu[configForMu].freqOffset = atoi(value); + } else if (strcmp(key, KEY_EAXC_OFFSET) == 0) { + config->perMu[configForMu].eaxcOffset = atoi(value); + printf("eAxcOffset = %d\n",config->perMu[configForMu].eaxcOffset); } else if (strcmp(key, KEY_NDLABSFREPOINTA) == 0) { config->nDLAbsFrePointA = atoi(value); printf("nDLAbsFrePointA: %d\n",config->nDLAbsFrePointA); @@ -247,17 +289,17 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * config->nULAbsFrePointA = atoi(value); printf("nULAbsFrePointA: %d\n",config->nULAbsFrePointA); } else if (strcmp(key, KEY_NDLBANDWIDTH) == 0) { - config->nDLBandwidth = atoi(value); - printf("nDLBandwidth: %d\n",config->nDLBandwidth); + config->perMu[configForMu].nDLBandwidth = atoi(value); + printf("nDLBandwidth: %d\n",config->perMu[configForMu].nDLBandwidth); } else if (strcmp(key, KEY_NULBANDWIDTH) == 0) { - config->nULBandwidth = atoi(value); - printf("nULBandwidth: %d\n",config->nULBandwidth); + config->perMu[configForMu].nULBandwidth = atoi(value); + printf("nULBandwidth: %d\n",config->perMu[configForMu].nULBandwidth); } else if (strcmp(key, KEY_NDLFFTSIZE) == 0) { - config->nDLFftSize = atoi(value); - printf("nDLFftSize: %d\n",config->nDLFftSize); + config->perMu[configForMu].nDLFftSize = atoi(value); + printf("nULFftSize: %d\n",config->perMu[configForMu].nULFftSize); } else if (strcmp(key, KEY_NULFFTSIZE) == 0) { - config->nULFftSize = atoi(value); - printf("nULFftSize: %d\n",config->nULFftSize); + config->perMu[configForMu].nULFftSize = atoi(value); + printf("nULFftSize: %d\n",config->perMu[configForMu].nULFftSize); } else if (strcmp(key, KEY_NFRAMEDUPLEXTYPE) == 0) { config->nFrameDuplexType = atoi(value); printf("nFrameDuplexType: %d\n",config->nFrameDuplexType); @@ -336,34 +378,13 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * } else if (strcmp(key, KEY_PRACH_COMPMETH) == 0) { config->prachCompMethod = atoi(value); } else if (strcmp(key, KEY_PRACH_IQ) == 0) { - config->prachiqWidth = atoi(value); + config->prachiqWidth = atoi(value); } else if (strcmp(key, KEY_MTU_SIZE) == 0) { config->mtu = atoi(value); printf("mtu %d\n", config->mtu); - } else if (strcmp(key, KEY_IO_SLEEP) == 0) { - config->io_sleep = atoi(value); - printf("io_sleep %d \n", config->io_sleep); - } else if (strcmp(key, KEY_IO_CORE) == 0) { - config->io_core = atoi(value); - printf("io_core %d [core id]\n", config->io_core); - } else if (strcmp(key, KEY_MAIN_CORE) == 0) { - config->io_core = atoi(value); - printf("io_core %d [core id]\n", config->io_core); - } else if (strcmp(key, KEY_IO_WORKER) == 0) { - config->io_worker = strtoll(value, NULL, 0); - printf("io_worker 0x%lx [mask]\n", config->io_worker); - } else if (strcmp(key, KEY_IO_WORKER_64_127) == 0) { - config->io_worker_64_127 = strtoll(value, NULL, 0); - printf("io_worker_64_127 0x%lx [mask]\n", config->io_worker_64_127); - } else if (strcmp(key, KEY_SYSTEM_CORE) == 0) { - config->system_core = atoi(value); - printf("system core %d [core id]\n", config->system_core); - } else if (strcmp(key, KEY_IOVA_MODE) == 0) { - config->iova_mode = atoi(value); - printf("iova_mode %d\n", config->iova_mode); - } else if (strcmp(key, KEY_INSTANCE_ID) == 0) { - config->instance_id = atoi(value); - printf("instance_id %d\n", config->instance_id); + } else if (strcmp(key, KEY_PUSCH_UP_MULTI_SECTION) == 0) { + config->nPuschUpMultiSectonSend= atoi(value); + printf("PuschUpMultiSec %d\n", config->nPuschUpMultiSectonSend); } else if (strncmp(key, KEY_DU_MAC, strlen(KEY_DU_MAC)) == 0) { unsigned int vf_num = 0; sscanf(key,"duMac%02u",&vf_num); @@ -420,8 +441,10 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * if (ant_num >= MAX_ANT_CARRIER_SUPPORTED) { printf("antC%d exceeds max antenna supported\n",ant_num); } else { - strncpy(&config->ant_file[ant_num][0], value, strlen(value)); - printf("antC%d: %s\n",ant_num, config->ant_file[ant_num]); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].ant_file[ant_num][0], value, len); + printf("[%d] antC%d: %s\n", configForMu, ant_num, config->ant_perMu[configForMu].ant_file[ant_num]); } } else if (strncmp(key, KEY_FILE_DLBFWUE, strlen(KEY_FILE_DLBFWUE)) == 0) { unsigned int ue_num = 0; @@ -429,8 +452,10 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * if (ue_num >= MAX_ANT_CARRIER_SUPPORTED) { printf("DlBfwUe%d exceeds max streams supported\n",ue_num); } else { - strncpy(&config->dl_bfw_file[ue_num][0], value, strlen(value)); - printf("DlBfwUe%d: %s\n",ue_num, config->dl_bfw_file[ue_num]); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].dl_bfw_file[ue_num][0], value, len); + printf("DlBfwUe%d: %s\n",ue_num, config->ant_perMu[configForMu].dl_bfw_file[ue_num]); } }else if (strncmp(key, KEY_FILE_ULBFWUE, strlen(KEY_FILE_ULBFWUE)) == 0) { unsigned int ue_num = 0; @@ -438,17 +463,32 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * if (ue_num >= MAX_ANT_CARRIER_SUPPORTED) { printf("UlBfwUe%d exceeds max streams supported\n",ue_num); } else { - strncpy(&config->ul_bfw_file[ue_num][0], value, strlen(value)); - printf("UlBfwUe%d: %s\n",ue_num, config->ul_bfw_file[ue_num]); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].ul_bfw_file[ue_num][0], value, len); + printf("UlBfwUe%d: %s\n",ue_num, config->ant_perMu[configForMu].ul_bfw_file[ue_num]); } - }else if (strncmp(key, KEY_FILE_ULSRS, strlen(KEY_FILE_ULSRS)) == 0) { + } else if (strncmp(key, KEY_FILE_ULSRS, strlen(KEY_FILE_ULSRS)) == 0) { unsigned int srs_ant = 0; - sscanf(key,"antSrsC%02u",&srs_ant); + sscanf(key,"antSrsC%03u",&srs_ant); if (srs_ant >= MAX_ANT_CARRIER_SUPPORTED_CAT_B) { printf("antSrsC%d exceeds max ant elemnets supported [%d]\n", srs_ant, MAX_ANT_CARRIER_SUPPORTED_CAT_B); } else { - strncpy(&config->ul_srs_file[srs_ant][0], value, strlen(value)); - printf("antSrsC%d: %s\n",srs_ant, config->ul_srs_file[srs_ant]); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].ul_srs_file[srs_ant][0], value, len); + printf("antSrsC%d: %s\n",srs_ant, config->ant_perMu[configForMu].ul_srs_file[srs_ant]); + } + } else if (strncmp(key, KEY_FILE_DLCSIRS, strlen(KEY_FILE_DLCSIRS)) == 0) { + unsigned int csirs_ant = 0; + sscanf(key,"csirsAntC%02u",&csirs_ant); + if (csirs_ant >= MAX_CSIRS_PORTS_SUPPORTED) { + printf("csirsAntC%d exceeds max ports supported [%d]\n", csirs_ant, MAX_CSIRS_PORTS_SUPPORTED); + } else { + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].dl_csirs_file[csirs_ant][0], value, len); + printf("csirsAntC%d: %s\n",csirs_ant, config->ant_perMu[configForMu].dl_csirs_file[csirs_ant]); } } else if (strncmp(key, KEY_FILE_SLOT_TX, strlen(KEY_FILE_SLOT_TX)) == 0) { unsigned int slot_num = 0; @@ -457,8 +497,10 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * if (slot_num >= XRAN_N_FE_BUF_LEN) { printf("SlotNumTx%d exceeds max slots supported\n",slot_num); } else { + int len = strlen(value); + if(len > 512) len = 511; config->SlotNum_fileEnabled = 1; - strncpy(&config->SlotNum_file[direction][slot_num][0], value, strlen(value)); + strncpy(&config->SlotNum_file[direction][slot_num][0], value, len); printf("SlotNumTx%d: %s\n",slot_num, config->SlotNum_file[direction][slot_num]); } }else if (strncmp(key, KEY_FILE_SLOT_RX, strlen(KEY_FILE_SLOT_RX)) == 0) { @@ -468,19 +510,48 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * if (slot_num >= XRAN_N_FE_BUF_LEN) { printf("SlotNumRx%d exceeds max slots supported\n",slot_num); } else { + int len = strlen(value); + if(len > 512) len = 511; config->SlotNum_fileEnabled = 1; - strncpy(&config->SlotNum_file[direction][slot_num][0], value, strlen(value)); + strncpy(&config->SlotNum_file[direction][slot_num][0], value, len); printf("SlotNumRx%d: %s\n",slot_num, config->SlotNum_file[direction][slot_num]); } } else if (strcmp(key, KEY_PRACH_ENABLE) == 0) { - config->enablePrach = atoi(value); - printf("Prach enable: %d\n",config->enablePrach); - }else if (strcmp(key, KEY_MAX_FRAME_ID) == 0) { + config->perMu[configForMu].prachEnable = atoi(value); + printf("Prach enable: %d\n",config->perMu[configForMu].prachEnable); + } else if (strcmp(key, KEY_NPRACH_FORMAT) == 0) { + config->nprachformat = atoi(value); + printf("config->nprachformat: %d\n",config->nprachformat); + } else if (strcmp(key, KEY_NPRACH_PERIOD) == 0) { + config->periodicity = atoi(value); + printf("config->periodicity: %d\n",config->periodicity); + } else if (strcmp(key, KEY_NPRACH_STARTTIME) == 0) { + config->startTime = atoi(value); + printf("config->startTime : %d\n",config->startTime); + } else if (strcmp(key, KEY_NPRACH_SUB_OFFSET) == 0) { + config->suboffset = atoi(value); + printf("config->suboffset : %d\n",config->suboffset); + } else if (strcmp(key, KEY_NUM_SUBCARRIERS) == 0) { + config->numSubCarriers = atoi(value); + printf("config->numSubCarriers : %d\n",config->numSubCarriers); + } else if (strcmp(key, KEY_NUM_REP) == 0) { + config->nRep = atoi(value); + printf("config->nRep : %d\n",config->nRep); + } else if (strcmp(key, KEY_MAX_FRAME_ID) == 0) { config->maxFrameId = atoi(value); printf("maxFrameId: %d\n",config->maxFrameId); + } else if (strcmp(key, KEY_DROP_PACKETS_UP) == 0) { + config->DropPacketsUp = atoi(value); + printf("dropPacketsUp enable: %d\n",config->DropPacketsUp); } else if (strcmp(key, KEY_SRS_ENABLE) == 0) { config->enableSrs = atoi(value); printf("Srs enable: %d\n",config->enableSrs); + } else if (strcmp(key, KEY_CSIRS_ENABLE) == 0) { + config->csirsEnable = atoi(value); + printf("CSI-RS enable: %d\n",config->csirsEnable); + } else if (strcmp(key, KEY_CSI_PORTS) == 0) { + config->nCsiPorts = atoi(value); + printf("CSI-RS Ports: %d\n",config->nCsiPorts); } else if (strcmp(key, KEY_SRS_SYM_IDX) == 0) { config->srsSymMask = atoi(value); printf("Srs symbol [0-13]: %d\n",config->srsSymMask); @@ -500,11 +571,13 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * config->puschMaskSlot = atoi(value); printf("PUSCH mask enable: %d\n",config->puschMaskSlot); } else if (strcmp(key, KEY_PRACH_CFGIDX) == 0) { - config->prachConfigIndex = atoi(value); - printf("Prach config index: %d\n",config->prachConfigIndex); + if(config->perMu[configForMu].prachEnable == 1) + config->perMu[configForMu].prachConfigIndex = atoi(value); + printf("Prach config index: %d\n",config->perMu[configForMu].prachConfigIndex); } else if (strcmp(key, KEY_PRACH_CFGIDX_LTE) == 0) { - config->prachConfigIndexLTE = atoi(value); - printf("Prach config index LTE for DSS: %d\n",config->prachConfigIndexLTE); + if(config->perMu[configForMu].prachEnable == 1) + config->perMu[configForMu].prachConfigIndexLTE = atoi(value); + printf("Prach config index LTE for DSS: %d\n",config->perMu[configForMu].prachConfigIndexLTE); } else if (strncmp(key, KEY_FILE_PRACH_AxC, strlen(KEY_FILE_PRACH_AxC)) == 0) { unsigned int ant_num = 0; sscanf(key,"antPrachC%02u",&ant_num); @@ -513,64 +586,70 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * printf("antC%d exceeds max antenna supported\n",ant_num); } else{ - strncpy(&config->prach_file[ant_num][0], value, strlen(value)); - printf("antPrachC%d: %s\n",ant_num, config->prach_file[ant_num]); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->ant_perMu[configForMu].prach_file[ant_num][0], value, len); + printf("antPrachC%d: %s\n",ant_num, config->ant_perMu[configForMu].prach_file[ant_num]); } } else if (strcmp(key, KEY_BFW_NUM) == 0) { config->totalBfWeights = atoi(value); printf("%s : %d\n",KEY_BFW_NUM, config->totalBfWeights); /* timing */ } else if (strcmp(key, KEY_TADV_CP_DL ) == 0) { - config->Tadv_cp_dl = atoi(value); - printf("Tadv_cp_dl: %d\n",config->Tadv_cp_dl); + config->perMu[configForMu].Tadv_cp_dl = atoi(value); + printf("Tadv_cp_dl[%d]: %d\n",configForMu, config->perMu[configForMu].Tadv_cp_dl); } else if (strcmp(key, KEY_T2A_MIN_CP_DL ) == 0) { - config->T2a_min_cp_dl = atoi(value); - printf("T2a_min_cp_dl: %d\n",config->T2a_min_cp_dl); + config->perMu[configForMu].T2a_min_cp_dl = atoi(value); + printf("T2a_min_cp_dl: %d\n",config->perMu[configForMu].T2a_min_cp_dl); } else if (strcmp(key, KEY_T2A_MAX_CP_DL ) == 0) { - config->T2a_max_cp_dl = atoi(value); - printf("T2a_max_cp_dl: %d\n",config->T2a_max_cp_dl); + config->perMu[configForMu].T2a_max_cp_dl = atoi(value); + printf("T2a_max_cp_dl: %d\n",config->perMu[configForMu].T2a_max_cp_dl); } else if (strcmp(key, KEY_T2A_MIN_CP_UL ) == 0) { - config->T2a_min_cp_ul = atoi(value); - printf("T2a_min_cp_ul: %d\n",config->T2a_min_cp_ul); + config->perMu[configForMu].T2a_min_cp_ul = atoi(value); + printf("T2a_min_cp_ul: %d\n",config->perMu[configForMu].T2a_min_cp_ul); } else if (strcmp(key, KEY_T2A_MAX_CP_UL ) == 0) { - config->T2a_max_cp_ul = atoi(value); - printf("T2a_max_cp_ul: %d\n",config->T2a_max_cp_ul); + config->perMu[configForMu].T2a_max_cp_ul = atoi(value); + printf("T2a_max_cp_ul: %d\n",config->perMu[configForMu].T2a_max_cp_ul); } else if (strcmp(key, KEY_T2A_MIN_UP ) == 0) { - config->T2a_min_up = atoi(value); - printf("T2a_min_up: %d\n",config->T2a_min_up); + config->perMu[configForMu].T2a_min_up = atoi(value); + printf("T2a_min_up: %d\n",config->perMu[configForMu].T2a_min_up); } else if (strcmp(key, KEY_T2A_MAX_UP ) == 0) { - config->T2a_max_up = atoi(value); - printf("T2a_max_up: %d\n",config->T2a_max_up); + config->perMu[configForMu].T2a_max_up = atoi(value); + printf("T2a_max_up: %d\n",config->perMu[configForMu].T2a_max_up); } else if (strcmp(key, KEY_TA3_MIN ) == 0) { - config->Ta3_min = atoi(value); - printf("Ta3_min: %d\n",config->Ta3_min); + config->perMu[configForMu].Ta3_min = atoi(value); + printf("Ta3_min: %d\n",config->perMu[configForMu].Ta3_min); } else if (strcmp(key, KEY_TA3_MAX ) == 0) { - config->Ta3_max = atoi(value); - printf("Ta3_max: %d\n",config->Ta3_max); + config->perMu[configForMu].Ta3_max = atoi(value); + printf("Ta3_max: %d\n",config->perMu[configForMu].Ta3_max); } else if (strcmp(key, KEY_T1A_MIN_CP_DL ) == 0) { - config->T1a_min_cp_dl = atoi(value); - printf("T1a_min_cp_dl: %d\n",config->T1a_min_cp_dl); + config->perMu[configForMu].T1a_min_cp_dl = atoi(value); + printf("T1a_min_cp_dl: %d\n",config->perMu[configForMu].T1a_min_cp_dl); } else if (strcmp(key, KEY_T1A_MAX_CP_DL ) == 0) { - config->T1a_max_cp_dl = atoi(value); - printf("T1a_max_cp_dl: %d\n",config->T1a_max_cp_dl); + config->perMu[configForMu].T1a_max_cp_dl = atoi(value); + printf("T1a_max_cp_dl: %d\n",config->perMu[configForMu].T1a_max_cp_dl); } else if (strcmp(key, KEY_T1A_MIN_CP_UL ) == 0) { - config->T1a_min_cp_ul = atoi(value); - printf("T1a_min_cp_ul: %d\n",config->T1a_min_cp_ul); + config->perMu[configForMu].T1a_min_cp_ul = atoi(value); + printf("T1a_min_cp_ul: %d\n",config->perMu[configForMu].T1a_min_cp_ul); } else if (strcmp(key, KEY_T1A_MAX_CP_UL ) == 0) { - config->T1a_max_cp_ul = atoi(value); - printf("T1a_max_cp_ul: %d\n",config->T1a_max_cp_ul); + config->perMu[configForMu].T1a_max_cp_ul = atoi(value); + printf("T1a_max_cp_ul: %d\n",config->perMu[configForMu].T1a_max_cp_ul); } else if (strcmp(key, KEY_T1A_MIN_UP ) == 0) { - config->T1a_min_up = atoi(value); - printf("T1a_min_up: %d\n",config->T1a_min_up); + config->perMu[configForMu].T1a_min_up = atoi(value); + printf("T1a_min_up: %d\n",config->perMu[configForMu].T1a_min_up); } else if (strcmp(key, KEY_T1A_MAX_UP ) == 0) { - config->T1a_max_up = atoi(value); - printf("T1a_max_up: %d\n",config->T1a_max_up); + config->perMu[configForMu].T1a_max_up = atoi(value); + printf("T1a_max_up: %d\n",config->perMu[configForMu].T1a_max_up); } else if (strcmp(key, KEY_TA4_MIN ) == 0) { - config->Ta4_min = atoi(value); - printf("Ta4_min: %d\n",config->Ta4_min); + config->perMu[configForMu].Ta4_min = atoi(value); + printf("Ta4_min: %d\n",config->perMu[configForMu].Ta4_min); } else if (strcmp(key, KEY_TA4_MAX ) == 0) { - config->Ta4_max = atoi(value); - printf("Ta4_max: %d\n",config->Ta4_max); + config->perMu[configForMu].Ta4_max = atoi(value); + printf("Ta4_max: %d\n",config->perMu[configForMu].Ta4_max); + /* end of timing */ + } else if (strcmp(key, KEY_TX_ADVANCED) == 0) { + config->perMu[configForMu].adv_tx_time = atoi(value); + printf("adv_tx_time: %d\n",config->perMu[configForMu].adv_tx_time); /* end of timing */ } else if (strcmp(key, KEY_CP_ENABLE ) == 0) { config->enableCP = atoi(value); @@ -583,7 +662,7 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * printf("debugStopCount: %d\n",config->debugStopCount); } else if (strcmp(key, KEY_BBDEV_MODE) == 0) { config->bbdevMode = atoi(value); - printf("bbdevMode: %d\n",config->debugStopCount); + printf("bbdevMode: %d\n",config->bbdevMode); } else if (strcmp(key, KEY_DYNA_SEC_ENA) == 0) { config->DynamicSectionEna = atoi(value); printf("DynamicSectionEna: %d\n",config->DynamicSectionEna); @@ -596,12 +675,6 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * } else if (strcmp(key, KEY_BETA) == 0) { config->GPS_Beta = atoi(value); printf("GPS_Beta: %d\n",config->GPS_Beta); - } else if (strcmp(key, KEY_CP_VTAG ) == 0) { - config->cp_vlan_tag = atoi(value); - printf("cp_vlan_tag: %d\n",config->cp_vlan_tag); - } else if (strcmp(key, KEY_UP_VTAG ) == 0) { - config->up_vlan_tag = atoi(value); - printf("up_vlan_tag: %d\n",config->up_vlan_tag); } else if (strcmp(key, KEY_MAX_SEC_SYM ) == 0) { config->max_sections_per_symbol = atoi(value); printf("max_sections_per_symbol: %d\n",config->max_sections_per_symbol); @@ -609,20 +682,20 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * config->max_sections_per_slot = atoi(value); printf("max_sections_per_slot: %d\n",config->max_sections_per_slot); } else if (strcmp(key, KEY_NPRBELEM_UL ) == 0) { - config->p_PrbMapUl->nPrbElm = atoi(value); - if (config->p_PrbMapUl->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) + config->p_PrbMapUl[configForMu]->nPrbElm = atoi(value); + if (config->p_PrbMapUl[configForMu]->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) { printf("nTddPeriod is larger than max allowed, invalid!\n"); - config->p_PrbMapUl->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; + config->p_PrbMapUl[configForMu]->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; } - printf("nPrbElemUl: %d\n",config->p_PrbMapUl->nPrbElm); + printf("nPrbElemUl: %d\n",config->p_PrbMapUl[configForMu]->nPrbElm); } else if (strncmp(key, KEY_PRBELEM_UL, strlen(KEY_PRBELEM_UL)) == 0) { sscanf(key,"PrbElemUl%u",§ion_idx_ul); - if (section_idx_ul >= config->p_PrbMapUl->nPrbElm){ + if (section_idx_ul >= config->p_PrbMapUl[configForMu]->nPrbElm){ printf("section_idx %d exceeds nPrbElemUl\n",section_idx_ul); } else{ - struct xran_prb_elm *pPrbElem = &config->p_PrbMapUl->prbMap[section_idx_ul]; + struct xran_prb_elm *pPrbElem = &config->p_PrbMapUl[configForMu]->prbMap[section_idx_ul]; sscanf(value, "%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd", (int16_t*)&pPrbElem->nRBStart, (int16_t*)&pPrbElem->nRBSize, @@ -639,11 +712,11 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * } } else if(strncmp(key, KEY_EXTBFW_UL, strlen(KEY_EXTBFW_UL)) == 0) { sscanf(key, "ExtBfwUl%u", §ion_idx_ul); - if(section_idx_ul >= config->p_PrbMapUl->nPrbElm) { + if(section_idx_ul >= config->p_PrbMapUl[configForMu]->nPrbElm) { printf("section_idx %d of bfw exceeds nPrbElemUl\n",section_idx_ul); } else{ - struct xran_prb_elm *pPrbElem = &config->p_PrbMapUl->prbMap[section_idx_ul]; + struct xran_prb_elm *pPrbElem = &config->p_PrbMapUl[configForMu]->prbMap[section_idx_ul]; sscanf(value, "%hhu,%hhu,%hhu,%hhu,%hhu,%hhu,%hhu", (uint8_t*)&pPrbElem->bf_weight.numBundPrb, (uint8_t*)&pPrbElem->bf_weight.numSetBFWs, @@ -656,22 +729,22 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * printf("numBundPrb %d, numSetBFW %d, RAD %d, disableBFW %d, bfwIqWidth %d, bfwCompMeth %d, extType %d\n", pPrbElem->bf_weight.numBundPrb, pPrbElem->bf_weight.numSetBFWs, pPrbElem->bf_weight.RAD, pPrbElem->bf_weight.disableBFWs, pPrbElem->bf_weight.bfwIqWidth, pPrbElem->bf_weight.bfwCompMeth, pPrbElem->bf_weight.extType); } - }else if (strcmp(key, KEY_NPRBELEM_DL ) == 0) { - config->p_PrbMapDl->nPrbElm = atoi(value); - if (config->p_PrbMapDl->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) + } else if (strcmp(key, KEY_NPRBELEM_DL ) == 0) { + config->p_PrbMapDl[configForMu]->nPrbElm = atoi(value); + if (config->p_PrbMapDl[configForMu]->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) { printf("nPrbElm is larger than max allowed, invalid!\n"); - config->p_PrbMapDl->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; + config->p_PrbMapDl[configForMu]->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; } - printf("nPrbElemDl: %d\n",config->p_PrbMapDl->nPrbElm); + printf("nPrbElemDl: %d\n",config->p_PrbMapDl[configForMu]->nPrbElm); } else if (strncmp(key, KEY_PRBELEM_DL, strlen(KEY_PRBELEM_DL)) == 0) { sscanf(key,"PrbElemDl%u",§ion_idx_dl); - if (section_idx_dl >= config->p_PrbMapDl->nPrbElm){ + if (section_idx_dl >= config->p_PrbMapDl[configForMu]->nPrbElm){ printf("section_idx %d exceeds nPrbElemDl\n",section_idx_dl); } else{ - struct xran_prb_elm *pPrbElem = &config->p_PrbMapDl->prbMap[section_idx_dl]; - sscanf(value, "%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd", + struct xran_prb_elm *pPrbElem = &config->p_PrbMapDl[configForMu]->prbMap[section_idx_dl]; + sscanf(value, "%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hx", (int16_t*)&pPrbElem->nRBStart, (int16_t*)&pPrbElem->nRBSize, (int16_t*)&pPrbElem->nStartSymb, @@ -682,18 +755,18 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * (int16_t*)&pPrbElem->iqWidth, (int16_t*)&pPrbElem->BeamFormingType, (int16_t*)&pPrbElem->ScaleFactor, - (int16_t*)&pPrbElem->reMask); + (uint16_t*)&pPrbElem->reMask); printf("nPrbElemDl%d: ",section_idx_dl); printf("nRBStart %d,nRBSize %d,nStartSymb %d,numSymb %d,nBeamIndex %d, bf_weight_update %d compMethod %d, iqWidth %d BeamFormingType %d ScaleFactor %d reMask %d\n", pPrbElem->nRBStart,pPrbElem->nRBSize,pPrbElem->nStartSymb,pPrbElem->numSymb,pPrbElem->nBeamIndex, pPrbElem->bf_weight_update, pPrbElem->compMethod, pPrbElem->iqWidth, pPrbElem->BeamFormingType, pPrbElem->ScaleFactor, pPrbElem->reMask); } } else if(strncmp(key, KEY_EXTBFW_DL, strlen(KEY_EXTBFW_DL)) == 0) { sscanf(key, "ExtBfwDl%u", §ion_idx_dl); - if(section_idx_dl >= config->p_PrbMapDl->nPrbElm) { + if(section_idx_dl >= config->p_PrbMapDl[configForMu]->nPrbElm) { printf("section_idx %d of bfw exceeds nPrbElemUl\n",section_idx_dl); } else{ - struct xran_prb_elm *pPrbElem = &config->p_PrbMapDl->prbMap[section_idx_dl]; + struct xran_prb_elm *pPrbElem = &config->p_PrbMapDl[configForMu]->prbMap[section_idx_dl]; sscanf(value, "%hhu,%hhu,%hhu,%hhu,%hhu,%hhu,%hhu", (uint8_t*)&pPrbElem->bf_weight.numBundPrb, (uint8_t*)&pPrbElem->bf_weight.numSetBFWs, @@ -715,7 +788,7 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * } printf("nPrbElemSrs: %d\n",config->p_PrbMapSrs->nPrbElm); } else if (strncmp(key, KEY_PRBELEM_SRS, strlen(KEY_PRBELEM_SRS)) == 0) { - sscanf(key,"PrbElemSrs%u",§ion_idx_srs); + sscanf(key,"PrbElemSrs%hhu",§ion_idx_srs); if (section_idx_srs >= config->p_PrbMapSrs->nPrbElm) { printf("section_idx %d exceeds nPrbElemSrs\n",section_idx_srs); }else { @@ -734,6 +807,34 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * printf("nRBStart %d,nRBSize %d,nStartSymb %d,numSymb %d,nBeamIndex %d, bf_weight_update %d compMethod %d, iqWidth %d BeamFormingType %d\n", pPrbElem->nRBStart,pPrbElem->nRBSize,pPrbElem->nStartSymb,pPrbElem->numSymb,pPrbElem->nBeamIndex, pPrbElem->bf_weight_update, pPrbElem->compMethod, pPrbElem->iqWidth, pPrbElem->BeamFormingType); } + } else if (strcmp(key, KEY_NPRBELEM_CSIRS ) == 0) { + config->p_PrbMapCsiRs->nPrbElm = atoi(value); + if (config->p_PrbMapCsiRs->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) + { + printf("nPrbElm is larger than max allowed, invalid!\n"); + config->p_PrbMapCsiRs->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; + } + printf("nPrbElemCsiRs: %d\n",config->p_PrbMapCsiRs->nPrbElm); + } else if (strncmp(key, KEY_PRBELEM_CSIRS, strlen(KEY_PRBELEM_CSIRS)) == 0) { + sscanf(key,"PrbElemCsirs%hhu",§ion_idx_csirs); + if (section_idx_csirs >= config->p_PrbMapCsiRs->nPrbElm) { + printf("section_idx %d exceeds nPrbElemCsirs\n",section_idx_csirs); + }else { + struct xran_prb_elm *pPrbElem = &config->p_PrbMapCsiRs->prbMap[section_idx_csirs]; + sscanf(value, "%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd", + (int16_t*)&pPrbElem->nRBStart, + (int16_t*)&pPrbElem->nRBSize, + (int16_t*)&pPrbElem->nStartSymb, + (int16_t*)&pPrbElem->numSymb, + (int16_t*)&pPrbElem->nBeamIndex, + (int16_t*)&pPrbElem->bf_weight_update, + (int16_t*)&pPrbElem->compMethod, + (int16_t*)&pPrbElem->iqWidth, + (int16_t*)&pPrbElem->BeamFormingType); + printf("nPrbElemCsirs%d: ",section_idx_csirs); + printf("nRBStart %d,nRBSize %d,nStartSymb %d,numSymb %d,nBeamIndex %d, bf_weight_update %d compMethod %d, iqWidth %d BeamFormingType %d\n", + pPrbElem->nRBStart,pPrbElem->nRBSize,pPrbElem->nStartSymb,pPrbElem->numSymb,pPrbElem->nBeamIndex, pPrbElem->bf_weight_update, pPrbElem->compMethod, pPrbElem->iqWidth, pPrbElem->BeamFormingType); + } } else if (strcmp(key, KEY_PRBMAP_BY_SYMB ) == 0) { config->RunSlotPrbMapBySymbolEnable = atoi(value); printf("RunSlotPrbMapBySymbolEnable: %d\n",config->RunSlotPrbMapBySymbolEnable); @@ -766,7 +867,7 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * printf("%d ",config->technology[i]); } printf("\n"); - }else { + } else { printf("Unsupported configuration key [%s]\n", key); return -1; } @@ -776,6 +877,7 @@ static int fillConfigStruct(RuntimeConfig *config, const char *key, const char * static int fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) { + static int curr_oxu=0; if (strcmp(key, KEY_APP_MODE) == 0){ config->appMode = atoi(value); printf("appMode %d \n", config->appMode); @@ -787,13 +889,19 @@ fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) printf("EthLinkSpeed %d \n", config->EthLinkSpeed); } else if (strcmp(key, KEY_XU_ETH_LINE_NUM) == 0){ config->EthLinesNumber = atoi(value); - printf("EthLinkSpeed %d \n", config->EthLinesNumber); + printf("EthLinesNumber %d \n", config->EthLinesNumber); } else if (strcmp(key, KEY_XU_RXQ_VF) == 0){ config->num_rxq = atoi(value); printf("oXuRxqNumber %d \n", config->num_rxq); } else if (strcmp(key, KEY_XU_CP_ON_ONE_VF) == 0) { config->one_vf_cu_plane = atoi(value); printf("oXuCPon1Vf %d \n", config->one_vf_cu_plane); + /*O-RAN.WG4.MP.0-v07.00.00 Section - 4.3 + one_vf_cu_plane = 0 is not supported. */ + if(config->one_vf_cu_plane == 0){ + printf("\n%s = 0 is not supported\n",KEY_XU_CP_ON_ONE_VF); + return -1; + } } else if (strcmp(key, KEY_IO_SLEEP) == 0) { config->io_sleep = atoi(value); printf("io_sleep %d \n", config->io_sleep); @@ -804,10 +912,10 @@ fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) config->main_core = atoi(value); printf("main_core %d [core id]\n", config->main_core); } else if (strcmp(key, KEY_IO_WORKER) == 0) { - config->io_worker = strtoll(value, NULL, 0); + config->io_worker = strtoull(value, NULL, 0); printf("io_worker 0x%lx [mask]\n", config->io_worker); } else if (strcmp(key, KEY_IO_WORKER_64_127) == 0) { - config->io_worker_64_127 = strtoll(value, NULL, 0); + config->io_worker_64_127 = strtoull(value, NULL, 0); printf("io_worker_64_127 0x%lx [mask]\n", config->io_worker_64_127); } else if (strcmp(key, KEY_SYSTEM_CORE) == 0) { config->system_core = atoi(value); @@ -821,17 +929,36 @@ fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) } else if (strcmp(key, KEY_INSTANCE_ID) == 0) { config->instance_id = atoi(value); printf("instance_id %d\n", config->instance_id); - }else if (strncmp(key, KEY_FILE_O_XU_CFG, strlen(KEY_FILE_O_XU_CFG)) == 0) { + } else if (strncmp(key, KEY_FILE_O_XU_CFG, strlen(KEY_FILE_O_XU_CFG)) == 0) { unsigned int o_xu_id = 0; sscanf(key,"oXuCfgFile%02u",&o_xu_id); if (o_xu_id >= XRAN_PORTS_NUM) { printf("oXuCfgFile%d exceeds max O-XU supported\n",o_xu_id); } else { - strncpy(&config->o_xu_cfg_file[o_xu_id][0], value, strlen(value)); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->o_xu_cfg_file[o_xu_id][0], value, len); printf("oXuCfgFile%d: %s\n",o_xu_id, config->o_xu_cfg_file[o_xu_id]); } + curr_oxu = o_xu_id; + } else if (strcmp(key, KEY_NUM_SECMU) == 0){ + config->numSecMu[curr_oxu] = atoi(value); + printf("numSecMu %d \n", config->numSecMu[curr_oxu]); + } else if (strncmp(key, KEY_FILE_SEC_NUM, strlen(KEY_FILE_SEC_NUM)) == 0) { + unsigned int idx = 0; + sscanf(key,"oXuSecNumFile%02u",&idx); + if (idx >= XRAN_MAX_NUM_MU) { + printf("oXuSecNumFile%d exceeds max Numerology supported\n",idx); + } else { + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->o_xu_mixed_num_file[curr_oxu][idx][0], value, len); + printf("oXuSecNumFile: %s\n", config->o_xu_mixed_num_file[curr_oxu][idx]); + } } else if (strncmp(key, KEY_FILE_O_XU_BBU_CFG, strlen(KEY_FILE_O_XU_BBU_CFG)) == 0) { - strncpy(&config->o_xu_bbu_cfg_file[0], value, strlen(value)); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->o_xu_bbu_cfg_file[0], value, len); printf("oXuBbuCfgFile: %s\n", config->o_xu_bbu_cfg_file); } else if (strncmp(key, KEY_OWDM_INIT_EN, strlen(KEY_OWDM_INIT_EN)) == 0) { config->owdmInitEn = atoi(value); @@ -867,7 +994,9 @@ fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) if (o_xu_id >= XRAN_PORTS_NUM || vf_num >= XRAN_VF_MAX){ printf("PciBusAddoXu%dVf%d exceeds max O-XU supported\n",o_xu_id, vf_num); } else { - strncpy(&config->o_xu_pcie_bus_addr[o_xu_id][vf_num][0], value, strlen(value)); + int len = strlen(value); + if(len > 512) len = 511; + strncpy(&config->o_xu_pcie_bus_addr[o_xu_id][vf_num][0], value, len); printf("PciBusAddoXu%dVf%d: %s\n",o_xu_id, vf_num, &config->o_xu_pcie_bus_addr[o_xu_id][vf_num][0]); } } else if (strncmp(key, KEY_O_XU_REM_MAC, strlen(KEY_O_XU_REM_MAC)) == 0) { @@ -904,6 +1033,18 @@ fillUsecaseStruct(UsecaseConfig *config, const char *key, const char *value) } else if (strncmp(key, KEY_XRAN_MLOG_DIS, strlen(KEY_XRAN_MLOG_DIS)) == 0) { config->mlogxrandisable = atoi(value); printf("xranMlogDisable %d\n", config->mlogxrandisable); + } else if (strncmp(key, KEY_LBM_ENABLE, strlen(KEY_LBM_ENABLE)) == 0) { + config->lbmEnable = atoi(value); + printf("%s %hhu\n",KEY_LBM_ENABLE, config->lbmEnable); + } else if (strncmp(key, KEY_LBM_NUM_RETRANSMISSIONS, strlen(KEY_LBM_NUM_RETRANSMISSIONS)) == 0) { + config->numRetransmissions = atoi(value); + printf("%s %hu\n",KEY_LBM_NUM_RETRANSMISSIONS, config->numRetransmissions); + } else if (strncmp(key, KEY_LBM_PERIODICITY, strlen(KEY_LBM_PERIODICITY)) == 0) { + config->LBMPeriodicity = atoi(value); + printf("%s %u\n",KEY_LBM_PERIODICITY,config->LBMPeriodicity); + } else if (strncmp(key, KEY_LBR_TIMEOUT, strlen(KEY_LBR_TIMEOUT)) == 0) { + config->LBRTimeOut = atoi(value); + printf("%s %u\n",KEY_LBR_TIMEOUT,config->LBRTimeOut); } else { printf("Unsupported configuration key [%s]\n", key); return -1; @@ -931,6 +1072,14 @@ fillSlotStructAsCb(void* cbParam, const char *key, const char *value) config->p_SlotPrbMap[direction][slot_idx]->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; } printf("nPrbElemUl: %d\n",config->p_SlotPrbMap[direction][slot_idx]->nPrbElm ); + } else if (strcmp(key, KEY_NPRBELEM_SRS ) == 0) { + config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm = atoi(value); + if (config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm > XRAN_MAX_SECTIONS_PER_SLOT) + { + printf("nTddPeriod is larger than max allowed, invalid!\n"); + config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm = XRAN_MAX_SECTIONS_PER_SLOT; + } + printf("nPrbElemSrs: %d\n",config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm ); } else if (strncmp(key, KEY_PRBELEM_UL_ANT_M, strlen(KEY_PRBELEM_UL_ANT_M)) == 0) { sscanf(key,"PrbElemUlAntCMask%u",§ion_idx); if (section_idx >= config->p_SlotPrbMap[direction][slot_idx]->nPrbElm){ @@ -940,7 +1089,16 @@ fillSlotStructAsCb(void* cbParam, const char *key, const char *value) sscanf(value, "%lx",(uint64_t*)&config->SlotPrbAntCMask[direction][slot_idx][section_idx]); printf("%s%u 0x%lx\n",KEY_PRBELEM_UL_ANT_M, section_idx, config->SlotPrbAntCMask[direction][slot_idx][section_idx]); } - } else if (strncmp(key, KEY_PRBELEM_UL_CC_M, strlen(KEY_PRBELEM_UL_CC_M)) == 0) { + } else if (strncmp(key, KEY_PRBELEM_SRS_ANT_M, strlen(KEY_PRBELEM_SRS_ANT_M)) == 0) { + sscanf(key,"PrbElemSrsAntCMask%u",§ion_idx); + if (section_idx >= config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm){ + printf("section_idx %d exceeds nPrbElemul\n",section_idx); + } + else{ + sscanf(value, "%lx",(uint64_t*)&config->SlotSrsPrbAntCMask[direction][slot_idx][section_idx]); + printf("%s%u 0x%lx\n",KEY_PRBELEM_SRS_ANT_M, section_idx, config->SlotSrsPrbAntCMask[direction][slot_idx][section_idx]); + } + } else if (strncmp(key, KEY_PRBELEM_UL_CC_M, strlen(KEY_PRBELEM_UL_CC_M)) == 0) { sscanf(key,"PrbElemUlCCMask%u",§ion_idx); if (section_idx >= config->p_SlotPrbMap[direction][slot_idx]->nPrbElm){ printf("section_idx %d exceeds nPrbElemUL\n",section_idx); @@ -949,6 +1107,15 @@ fillSlotStructAsCb(void* cbParam, const char *key, const char *value) sscanf(value, "%02hx",(uint16_t*)&config->SlotPrbCCmask[direction][slot_idx][section_idx]); printf("%s%u 0x%02x\n",KEY_PRBELEM_UL_CC_M, section_idx, config->SlotPrbCCmask[direction][slot_idx][section_idx]); } + } else if (strncmp(key, KEY_PRBELEM_SRS_CC_M, strlen(KEY_PRBELEM_SRS_CC_M)) == 0) { + sscanf(key,"PrbElemSrsCCMask%u",§ion_idx); + if (section_idx >= config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm){ + printf("section_idx %d exceeds nPrbElemUL\n",section_idx); + } + else{ + sscanf(value, "%02hx",(uint16_t*)&config->SlotSrsPrbCCmask[direction][slot_idx][section_idx]); + printf("%s%u 0x%02x\n",KEY_PRBELEM_SRS_CC_M, section_idx, config->SlotSrsPrbCCmask[direction][slot_idx][section_idx]); + } } else if (strncmp(key, KEY_PRBELEM_UL, strlen(KEY_PRBELEM_UL)) == 0) { sscanf(key,"PrbElemUl%u",§ion_idx); if (section_idx >= config->p_SlotPrbMap[direction][slot_idx]->nPrbElm) { @@ -970,6 +1137,27 @@ fillSlotStructAsCb(void* cbParam, const char *key, const char *value) printf("nRBStart %d,nRBSize %d,nStartSymb %d,numSymb %d,nBeamIndex %d, bf_weight_update %d compMethod %d, iqWidth %d BeamFormingType %d\n", pPrbElem->nRBStart,pPrbElem->nRBSize,pPrbElem->nStartSymb,pPrbElem->numSymb,pPrbElem->nBeamIndex, pPrbElem->bf_weight_update, pPrbElem->compMethod, pPrbElem->iqWidth, pPrbElem->BeamFormingType); } + } else if (strncmp(key, KEY_PRBELEM_SRS, strlen(KEY_PRBELEM_SRS)) == 0) { + sscanf(key,"PrbElemSrs%u",§ion_idx); + if (section_idx >= config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm) { + printf("section_idx %d exceeds nPrbElemUl\n",section_idx); + } + else { + struct xran_prb_elm *pPrbElem = &config->p_SlotSrsPrbMap[direction][slot_idx]->prbMap[section_idx]; + sscanf(value, "%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd,%hd", + (int16_t*)&pPrbElem->nRBStart, + (int16_t*)&pPrbElem->nRBSize, + (int16_t*)&pPrbElem->nStartSymb, + (int16_t*)&pPrbElem->numSymb, + (int16_t*)&pPrbElem->nBeamIndex, + (int16_t*)&pPrbElem->bf_weight_update, + (int16_t*)&pPrbElem->compMethod, + (int16_t*)&pPrbElem->iqWidth, + (int16_t*)&pPrbElem->BeamFormingType); + printf("nPrbElemSrs%d: ",section_idx); + printf("nRBStart %d,nRBSize %d,nStartSymb %d,numSymb %d,nBeamIndex %d, bf_weight_update %d compMethod %d, iqWidth %d BeamFormingType %d\n", + pPrbElem->nRBStart,pPrbElem->nRBSize,pPrbElem->nStartSymb,pPrbElem->numSymb,pPrbElem->nBeamIndex, pPrbElem->bf_weight_update, pPrbElem->compMethod, pPrbElem->iqWidth, pPrbElem->BeamFormingType); + } } else if(strncmp(key, KEY_EXTBFW_UL, strlen(KEY_EXTBFW_UL)) == 0) { sscanf(key, "ExtBfwUl%u", §ion_idx); if(section_idx >= config->p_SlotPrbMap[direction][slot_idx]->nPrbElm) { @@ -1065,8 +1253,7 @@ fillSlotStructAsCb(void* cbParam, const char *key, const char *value) struct xran_prb_map* config_malloc_prb_map(void) { - //uint32_t size = sizeof(struct xran_prb_map) + (XRAN_MAX_SECTIONS_PER_SLOT -1) * sizeof(struct xran_prb_elm); - uint32_t size = sizeof(struct xran_prb_map) + (8) * sizeof(struct xran_prb_elm); + uint32_t size = sizeof(struct xran_prb_map) + (XRAN_MAX_SECTIONS_PER_SLOT) * sizeof(struct xran_prb_elm); void *ret = NULL; ret = malloc(size); @@ -1085,13 +1272,17 @@ config_init(RuntimeConfig *p_o_xu_cfg) int32_t i, j; memset(p_o_xu_cfg, 0, sizeof(RuntimeConfig)); - p_o_xu_cfg->p_PrbMapDl = config_malloc_prb_map(); - p_o_xu_cfg->p_PrbMapUl = config_malloc_prb_map(); + for(i= 0; i < XRAN_MAX_NUM_MU; i++){ + p_o_xu_cfg->p_PrbMapDl[i] = config_malloc_prb_map(); + p_o_xu_cfg->p_PrbMapUl[i] = config_malloc_prb_map(); + } p_o_xu_cfg->p_PrbMapSrs = config_malloc_prb_map(); + p_o_xu_cfg->p_PrbMapCsiRs = config_malloc_prb_map(); for (i= 0; i < XRAN_DIR_MAX; i++){ for (j= 0; j < XRAN_N_FE_BUF_LEN; j++){ p_o_xu_cfg->p_SlotPrbMap[i][j] = config_malloc_prb_map(); + p_o_xu_cfg->p_SlotSrsPrbMap[i][j] = config_malloc_prb_map(); } } @@ -1100,8 +1291,8 @@ config_init(RuntimeConfig *p_o_xu_cfg) for (j = 0; j < XRAN_N_FE_BUF_LEN; j++) { for (k = 0; k < XRAN_MAX_SECTOR_NR; k++) { for (z = 0; z < XRAN_MAX_ANTENNA_NR; z++) { - p_o_xu_cfg->p_RunSlotPrbMap[i][j][k][z] = config_malloc_prb_map(); - p_o_xu_cfg->p_RunSrsSlotPrbMap[i][j][k][z] = config_malloc_prb_map(); + p_o_xu_cfg->p_SlotSrsPrbMap[i][j][k][z] = config_malloc_prb_map(); + p_o_xu_cfg->p_SlotPrbMap[i][j][k][z] = config_malloc_prb_map(); } } } @@ -1123,6 +1314,10 @@ config_init2(RuntimeConfig *p_o_xu_cfg) p_o_xu_cfg->p_RunSlotPrbMap[i][j][k][z] = config_malloc_prb_map(); p_o_xu_cfg->p_RunSrsSlotPrbMap[i][j][k][z] = config_malloc_prb_map(); } + + for (z = 0; z < p_o_xu_cfg->antElmTRx; z++) { + p_o_xu_cfg->p_RunSrsSlotPrbMap[i][j][k][z] = config_malloc_prb_map(); + } } } } @@ -1177,7 +1372,7 @@ parseConfigFile(const char *filename, RuntimeConfig *config) key[i] = '\0'; trim(key); if ((i + 1 > inputLen - 1) || (i - 2 > inputLen)) { - log_err("Parsing config file error at line %d", lineNum); + printf("1:Parsing config file error at line %d\n", lineNum); fclose(file); return -1; } @@ -1186,14 +1381,13 @@ parseConfigFile(const char *filename, RuntimeConfig *config) trim(value); if (strlen(key) == 0 || strlen(value) == 0) { - printf("Parsing config file error at line %d", lineNum); + printf("2:Parsing config file error at line %d\n", lineNum); fclose(file); return -1; } if (fillConfigStruct(config, key, value) != 0) { - fclose(file); - return -1; + printf("3:Parsing config file error at line %d\n", lineNum); } break; @@ -1248,7 +1442,6 @@ parseSlotConfigFile(const char *dir, RuntimeConfig *config) if (parseFileViaCb(filename, fillSlotStructAsCb, (void*)&slot_cfg_param)) { printf("Configuration file error\n"); - return -1; } } } @@ -1348,7 +1541,7 @@ int parseUsecaseFile(const char *filename, UsecaseConfig *usecase_cfg) char value[MAX_LINE_SIZE] = {0}; FILE *file = fopen(filename, "r"); - if (NULL == file) { + if (NULL == file){ log_err("Error while opening config file from: %s", filename); return -1; } @@ -1356,10 +1549,10 @@ int parseUsecaseFile(const char *filename, UsecaseConfig *usecase_cfg) for (;;) { if (fgets(inputLine, MAX_LINE_SIZE, file) == NULL) { if (lineNum > 0) { - printf("%d lines of config file has been read.\n", lineNum); + printf("%d lines of usecase config file has been read.\n", lineNum); break; } else { - printf("Configuration file reading error has occurred.\n"); + printf("Usecase configuration file reading error has occurred.\n"); fclose(file); return -1; } @@ -1382,7 +1575,7 @@ int parseUsecaseFile(const char *filename, UsecaseConfig *usecase_cfg) key[i] = '\0'; trim(key); if ((i + 1 > inputLen - 1) || (i - 2 > inputLen)) { - log_err("Parsing config file error at line %d", lineNum); + printf("1:Parsing usecase config file error at line %d\n", lineNum); fclose(file); return -1; } @@ -1391,14 +1584,13 @@ int parseUsecaseFile(const char *filename, UsecaseConfig *usecase_cfg) trim(value); if (strlen(key) == 0 || strlen(value) == 0) { - printf("Parsing config file error at line %d", lineNum); + printf("2:Parsing usecase config file error at line %d\n", lineNum); fclose(file); return -1; } if (fillUsecaseStruct(usecase_cfg, key, value) != 0) { - fclose(file); - return -1; + printf("3:Parsing usecase config file error at line %d\n", lineNum); } break; diff --git a/fhi_lib/app/src/config.h b/fhi_lib/app/src/config.h index 4745c26..a771046 100644 --- a/fhi_lib/app/src/config.h +++ b/fhi_lib/app/src/config.h @@ -31,6 +31,20 @@ #include "xran_fh_o_du.h" #include "xran_pkt.h" + +typedef struct ant_files_perMu +{ + char ant_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ + char prach_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ + + char dl_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for DL streams */ + char ul_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for UL streams */ + + char ul_srs_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANT_ARRAY_ELM_NR][512]; /**< file with SRS content for UL antenna elements */ + char dl_csirs_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_CSIRS_PORTS][512]; /**< file with CSIRS content for CSI-RS ports */ + +} ant_files_perMu; + /** Run time configuration of application */ typedef struct _RuntimeConfig { @@ -54,42 +68,32 @@ typedef struct _RuntimeConfig struct rte_ether_addr o_ru_addr[XRAN_VF_MAX]; /**< O-RU Ethernet Mac Address */ struct rte_ether_addr tmp_addr; /**< Temp Ethernet Mac Address */ - uint32_t instance_id; /**< Instance ID of application */ - uint32_t io_core; /**< Core used for IO */ - uint64_t io_worker; /**< Mask for worker cores 0-63 */ - uint64_t io_worker_64_127; /**< Mask for worker cores 64-127 */ - int32_t io_sleep; /**< enable sleep on PMD cores */ - uint32_t system_core; /* house keeping core */ - int iova_mode; /**< DPDK IOVA Mode */ - uint32_t mtu; /**< maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) */ + uint32_t nPuschUpMultiSectonSend; /**< multi-section pusch in one up message. Test pusch/pucch multi-section receiver used*/ int numSlots; /**< number of slots in IQ vector */ - char ant_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ - char prach_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ + // char ant_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ + // char prach_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */ + ant_files_perMu ant_perMu[XRAN_MAX_NUM_MU]; + // char dl_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for DL streams */ + // char ul_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for UL streams */ - char dl_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for DL streams */ - char ul_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for UL streams */ - - char ul_srs_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANT_ARRAY_ELM_NR][512]; /**< file with SRS content for UL antenna elements */ + // char ul_srs_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANT_ARRAY_ELM_NR][512]; /**< file with SRS content for UL antenna elements */ /* prach config */ - uint8_t enablePrach; /**< enable PRACH */ uint8_t prachOffset; /**< Sets the PRACH position in frequency / subcarrier position, n_PRBoffset^RA and is expressed as a physical resource block number. Set by SIB2, prach-FreqOffset in E-UTRA. */ - uint8_t prachConfigIndex;/**< TS36.211 - Table 5.7.1-2 : PRACH Configuration Index */ - uint8_t prachConfigIndexLTE;/**< PRACH Configuration Index for LTE in dss case*/ uint8_t iqswap; /**< do swap of IQ before send to ETH */ uint8_t nebyteorderswap; /**< do swap of byte order from host byte order to network byte order. ETH */ uint8_t compression; /**< enable use case with compression */ uint8_t CompHdrType; /**< dynamic or static compression header */ - uint8_t prachCompMethod; /**< compression enable for PRACH */ - uint8_t prachiqWidth; /**< IQ width for PRACH */ + uint8_t prachCompMethod; /**< compression enable for PRACH */ + uint8_t prachiqWidth; /**< IQ width for PRACH */ uint16_t totalBfWeights; /**< The total number of beamforming weights on RU */ - - uint8_t enableSrs; /**< enable SRS (valid for Cat B only) */ + uint32_t DropPacketsUp; /**< enable droping the up channel packets if they miss timing window */ + uint8_t enableSrs; /**< enable SRS (valid for Cat B only) */ uint16_t srsSymMask; /* deprecated */ uint16_t srsSlot; /**< SRS slot within TDD period (special slot), for O-RU emulation */ uint8_t srsNdmOffset; /**< tti offset to delay the transmission of NDM SRS UP, for O-RU emulation */ @@ -100,28 +104,9 @@ typedef struct _RuntimeConfig uint8_t extType; uint16_t maxFrameId; /**< max value of frame id */ - - uint16_t Tadv_cp_dl; - uint16_t T2a_min_cp_dl; - uint16_t T2a_max_cp_dl; - uint16_t T2a_min_cp_ul; - uint16_t T2a_max_cp_ul; - uint16_t T2a_min_up; - uint16_t T2a_max_up; - uint16_t Ta3_min; - uint16_t Ta3_max; - uint16_t T1a_min_cp_dl; - uint16_t T1a_max_cp_dl; - uint16_t T1a_min_cp_ul; - uint16_t T1a_max_cp_ul; - uint16_t T1a_min_up; - uint16_t T1a_max_up; - uint16_t Ta4_min; - uint16_t Ta4_max; + xran_fh_per_mu_cfg perMu[XRAN_MAX_NUM_MU]; uint8_t enableCP; /**< enable C-plane */ - uint8_t cp_vlan_tag; /**< C-plane vlan tag */ - uint8_t up_vlan_tag; /**< U-plane vlan tag */ int32_t debugStop; int32_t debugStopCount; @@ -130,22 +115,22 @@ typedef struct _RuntimeConfig int32_t GPS_Alpha; int32_t GPS_Beta; - uint8_t mu_number; /**< Mu numner as per 3GPP */ + uint8_t numMu; + uint8_t mu_number[XRAN_MAX_NUM_MU]; /**< Mu number as per 3GPP */ uint32_t nDLAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ uint32_t nULAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ - uint32_t nDLBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ - uint32_t nULBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ - uint32_t nDLFftSize; /**< DL FFT size */ - uint32_t nULFftSize; /**< UL FFT size */ + // uint32_t nDLBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ + // uint32_t nULBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ uint8_t nFrameDuplexType; uint8_t nTddPeriod; struct xran_slot_config sSlotConfig[XRAN_MAX_TDD_PERIODICITY]; - struct xran_prb_map* p_PrbMapDl; - struct xran_prb_map* p_PrbMapUl; + struct xran_prb_map* p_PrbMapDl[XRAN_MAX_NUM_MU]; + struct xran_prb_map* p_PrbMapUl[XRAN_MAX_NUM_MU]; struct xran_prb_map* p_PrbMapSrs; + struct xran_prb_map* p_PrbMapCsiRs; uint8_t dssEnable; /**< enable DSS (extension-9) */ uint8_t dssPeriod; /**< DSS pattern period for LTE/NR */ @@ -153,11 +138,16 @@ typedef struct _RuntimeConfig uint16_t SlotPrbCCmask[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTIONS_PER_SLOT]; uint64_t SlotPrbAntCMask[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTIONS_PER_SLOT]; + + uint16_t SlotSrsPrbCCmask[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTIONS_PER_SLOT]; + uint64_t SlotSrsPrbAntCMask[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTIONS_PER_SLOT]; + struct xran_prb_map* p_SlotPrbMap[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN]; + struct xran_prb_map* p_SlotSrsPrbMap[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN]; int32_t RunSlotPrbMapEnabled; struct xran_prb_map* p_RunSlotPrbMap[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; - struct xran_prb_map* p_RunSrsSlotPrbMap[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR]; + struct xran_prb_map* p_RunSrsSlotPrbMap[XRAN_DIR_MAX][XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR]; int32_t DU_Port_ID_bitwidth; int32_t BandSector_ID_bitwidth; @@ -171,12 +161,26 @@ typedef struct _RuntimeConfig uint16_t max_sections_per_slot; uint16_t max_sections_per_symbol; int32_t RunSlotPrbMapBySymbolEnable; + + /*NPRACH Parameters to use only in case of NB-IOT*/ + uint8_t nprachformat; + uint16_t periodicity; + uint16_t startTime; + uint8_t suboffset; + uint8_t numSubCarriers; + uint8_t nRep; /*Repetitions*/ + + uint8_t csirsEnable; /**< enable CSI-RS (valid for Cat B only) */ + uint8_t nCsiPorts; + } RuntimeConfig; /** use case configuration */ typedef struct _UsecaseConfig { uint8_t oXuNum; /**< Number of O-RU/O-DU connected to this instance */ + uint8_t numSecMu[XRAN_PORTS_NUM]; /**< Number of numerologies in mixedNumerology case */ + uint8_t mixedMu[XRAN_MAX_NUM_MU]; uint8_t appMode; /**< Application mode: O-DU or O-RU */ uint32_t instance_id; /**< Instance ID of application */ @@ -209,6 +213,7 @@ typedef struct _UsecaseConfig struct rte_ether_addr remote_o_xu_addr_copy[XRAN_VF_MAX]; /**< Temp Ethernet Mac Address */ char o_xu_cfg_file [XRAN_PORTS_NUM][512]; /**< file with config for each O-XU */ + char o_xu_mixed_num_file[XRAN_PORTS_NUM][XRAN_MAX_NUM_MU][512]; /**< file for secondary numerologies*/ char o_xu_pcie_bus_addr[XRAN_PORTS_NUM][XRAN_VF_MAX][512]; /**< VFs used for each O-RU|O-DU */ @@ -219,6 +224,13 @@ typedef struct _UsecaseConfig will be spread across all allowed symbols and multiple cores to reduce burstiness */ int32_t bbu_offload; /**< enable packet handling on BBU cores */ int32_t mlogxrandisable; /**< set to 1 to disable mlog 0 - default mlog enabled */ + + /* Config for IEEE 802.1Q Connectivity and fault management - LBM/LBR */ + bool lbmEnable; + uint16_t numRetransmissions; + uint16_t LBRTimeOut; + uint16_t LBMPeriodicity; + } UsecaseConfig; /** diff --git a/fhi_lib/app/src/sample-app.c b/fhi_lib/app/src/sample-app.c index 43582f5..2a9676b 100644 --- a/fhi_lib/app/src/sample-app.c +++ b/fhi_lib/app/src/sample-app.c @@ -44,13 +44,16 @@ #include #include #include +#include "rte_ethdev.h" #include "common.h" #include "config.h" #include "xran_mlog_lnx.h" +#include "xran_main.h" #include "xran_fh_o_du.h" #include "xran_sync_api.h" +#include "xran_timer.h" #include "xran_mlog_task_id.h" #include "app_io_fh_xran.h" #include "app_profile_xran.h" @@ -69,6 +72,7 @@ struct sample_app_params { int num_vfs; int num_o_xu; + int manual_start; char *cfg_file; char *usecase_file; char vf_pcie_addr[XRAN_PORTS_NUM][XRAN_VF_MAX][32]; @@ -80,8 +84,11 @@ struct app_sym_cb_ctx { }; static enum app_state state; +#ifndef POLL_EBBU_OFFLOAD static uint64_t ticks_per_usec; - +#else +uint64_t ticks_per_usec; +#endif UsecaseConfig* p_usecaseConfiguration = {NULL}; RuntimeConfig* p_startupConfiguration[XRAN_PORTS_NUM] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; @@ -89,6 +96,7 @@ struct app_sym_cb_ctx cb_sym_ctx[XRAN_CB_SYM_MAX]; long old_rx_counter[XRAN_PORTS_NUM] = {0,0,0,0,0,0,0,0}; long old_tx_counter[XRAN_PORTS_NUM] = {0,0,0,0,0,0,0,0}; +char dpdkVfioVfToken[64] = ""; static void app_print_menu() @@ -191,6 +199,7 @@ app_version_print(void) printf("build-date: %s\n", compilation_date); printf("build-time: %s\n", compilation_time); printf("build-with: %s\n", compiler); + printf(" XRAN_N_FE_BUF_LEN: %d\n", XRAN_N_FE_BUF_LEN); } static void @@ -211,6 +220,7 @@ app_help(void) "-c | --vf_addr_o_xu_c " "-d | --vf_addr_o_xu_d " "-u | --usecasefile \n"\ + "-i | --interactive Do not autostart" "-h | --help print usage\n"; printf("%s", help_content); @@ -253,6 +263,7 @@ app_parse_cmdline_args(int argc, char ** argv, struct sample_app_params* params) {"vf_addr_o_xu_f", required_argument, 0, 'F'}, {"vf_addr_o_xu_g", required_argument, 0, 'g'}, {"vf_addr_o_xu_h", required_argument, 0, 'H'}, + {"interactive", no_argument, 0, 'i'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; @@ -263,7 +274,7 @@ app_parse_cmdline_args(int argc, char ** argv, struct sample_app_params* params) //int this_option_optind = optind ? optind : 1; int option_index = 0; - c = getopt_long(argc, argv, "a:b:c:d:e:f:F:g:h:H:p:u:v", long_options, &option_index); + c = getopt_long(argc, argv, "a:b:c:d:e:f:F:g:h:H:p:u:v:i", long_options, &option_index); if (c == -1) break; @@ -314,6 +325,10 @@ app_parse_cmdline_args(int argc, char ** argv, struct sample_app_params* params) vf_cnt +=1; } break; + case 'i': + printf("Disable auto start!\n"); + params->manual_start = 1; + break; case 'h': app_help(); exit(0); @@ -353,15 +368,44 @@ app_apply_slot_cfg(RuntimeConfig *config) struct xran_prb_elm *pMapElmRun = &pRbMap->prbMap[pRbMap->nPrbElm]; struct xran_prb_elm *pMapElmCfg = &config->p_SlotPrbMap[direction][slot_idx]->prbMap[section_idx]; memcpy(pMapElmRun, pMapElmCfg, sizeof(struct xran_prb_elm)); - } else { + // if(direction == XRAN_DIR_UL) + // printf("%d: %d %d\n",slot_idx, ant_idx, section_idx); + } else { rte_panic("Incorrect slot cfg\n"); - } + } pRbMap->nPrbElm++; enable = 1; - } - } -} - } + } + } + } + } + + /** SRS */ + for (ant_idx = 0; ant_idx < config->antElmTRx; ant_idx++) { + for (section_idx = 0; section_idx < config->p_SlotSrsPrbMap[direction][slot_idx]->nPrbElm && section_idx < XRAN_MAX_SECTIONS_PER_SLOT; section_idx++) { + if (config->SlotSrsPrbCCmask[direction][slot_idx][section_idx] & (1L << cc_idx)) { + if (config->SlotSrsPrbAntCMask[direction][slot_idx][section_idx] & (1L << ant_idx)) { + struct xran_prb_map *pRbMap = config->p_RunSrsSlotPrbMap[direction][slot_idx][cc_idx][ant_idx]; + pRbMap->dir = direction; + pRbMap->xran_port = config->o_xu_id; + pRbMap->band_id = 0; + pRbMap->cc_id = cc_idx; + pRbMap->ru_port_id = ant_idx; + pRbMap->tti_id = slot_idx; + pRbMap->start_sym_id = 0; + if (pRbMap->nPrbElm < XRAN_MAX_SECTIONS_PER_SLOT && section_idx < XRAN_MAX_SECTIONS_PER_SLOT) { + struct xran_prb_elm *pMapElmRun = &pRbMap->prbMap[pRbMap->nPrbElm]; + struct xran_prb_elm *pMapElmCfg = &config->p_SlotSrsPrbMap[direction][slot_idx]->prbMap[section_idx]; + memcpy(pMapElmRun, pMapElmCfg, sizeof(struct xran_prb_elm)); + } else { + rte_panic("Incorrect slot cfg\n"); + } + pRbMap->nPrbElm++; + enable = 1; + } + } + } + } } } } @@ -379,6 +423,7 @@ app_parse_all_cfgs(struct sample_app_params* p_args, UsecaseConfig* p_use_cfg, int32_t vf_num = 0; int32_t o_xu_id = 0; char filename[512]; + char secNumfile[512]; char bbu_filename[512]; char *dir; size_t len; @@ -425,7 +470,7 @@ app_parse_all_cfgs(struct sample_app_params* p_args, UsecaseConfig* p_use_cfg, /* use cmdline pcie address */ for (o_xu_id = 0; o_xu_id < p_use_cfg->oXuNum && o_xu_id < XRAN_PORTS_NUM; o_xu_id++) { for (vf_num = 0; vf_num < XRAN_VF_MAX && p_args->num_vfs ; vf_num++) { - strncpy(&p_use_cfg->o_xu_pcie_bus_addr[o_xu_id][vf_num][0], &p_args->vf_pcie_addr[o_xu_id][vf_num][0], RTE_MIN (512,strlen(&p_args->vf_pcie_addr[o_xu_id][vf_num][0]))); + strncpy(&p_use_cfg->o_xu_pcie_bus_addr[o_xu_id][vf_num][0], &p_args->vf_pcie_addr[o_xu_id][vf_num][0], RTE_MIN (511,strlen(&p_args->vf_pcie_addr[o_xu_id][vf_num][0]))); } } @@ -450,7 +495,12 @@ app_parse_all_cfgs(struct sample_app_params* p_args, UsecaseConfig* p_use_cfg, printf("File name error\n"); return -1; } - strncpy(p_use_cfg->o_xu_bbu_cfg_file, bbu_filename, RTE_MIN (512, strlen(bbu_filename))); + if (strlen(bbu_filename) > 511){ + printf("app_parse_all_cfgs: bbu_filename, %s, is too long. Maximum is 511 characters!!\n", bbu_filename); + return -1; + } else { + strncpy(p_use_cfg->o_xu_bbu_cfg_file, bbu_filename, RTE_MIN (511, strlen(bbu_filename))); + } printf("bbu_cfg_file (%s)\n",p_use_cfg->o_xu_bbu_cfg_file); #ifdef FWK_ENABLED p_use_cfg->bbu_offload = 1; @@ -464,14 +514,15 @@ app_parse_all_cfgs(struct sample_app_params* p_args, UsecaseConfig* p_use_cfg, for (o_xu_id = 0; o_xu_id < p_use_cfg->oXuNum && o_xu_id < XRAN_PORTS_NUM; o_xu_id++) { memset(filename, 0, sizeof(filename)); + int idx = 0; printf("dir (%s)\n",dir); len = strlen(dir) + 1; if (len > 511){ printf("app_parse_all_cfgs: Name of directory, %s, xu_id = %d is too long. Maximum is 511 characters!!\n", dir, o_xu_id); - return -1; + return -1; } else { strncpy(filename, dir, RTE_MIN (512,len)); - } + } strncat(filename, "/", 1); len +=1; len = (sizeof(filename)) - len; @@ -500,14 +551,39 @@ app_parse_all_cfgs(struct sample_app_params* p_args, UsecaseConfig* p_use_cfg, return -1; } } - + // if(p_use_cfg->numSecMu > 0){ + for(idx = 0; idx < p_use_cfg->numSecMu[o_xu_id]; idx++){ + memset(secNumfile, 0, sizeof(secNumfile)); + // printf("dir (%s)\n",dir); + len = strlen(dir) + 1; + if (len > 511){ + printf("app_parse_all_cfgs: Name of directory, %s, xu_id = %d is too long. Maximum is 511 characters!!\n", dir, o_xu_id); + return -1; + } else { + strncpy(secNumfile, dir, RTE_MIN(512,len)); + } + strncat(secNumfile, "/", 1); + len +=1; + len = (sizeof(secNumfile)) - len; + if (len > strlen(p_use_cfg->o_xu_mixed_num_file[o_xu_id][idx])) { + strncat(secNumfile, p_use_cfg->o_xu_mixed_num_file[o_xu_id][idx], RTE_MIN (len, strlen(p_use_cfg->o_xu_mixed_num_file[o_xu_id][idx]))); + } else { + printf("File name error\n"); + return -1; + } + if (parseConfigFile(secNumfile, p_o_xu_cfg) != 0) { + printf("Configuration file error\n"); + return -1; + } + } + // } p_o_xu_cfg++; } } else { printf("p_args error\n"); app_help(); - exit(-1); - } + exit(-1); + } } else { printf("p_args error\n"); exit(-1); @@ -522,416 +598,698 @@ app_setup_o_xu_buffers(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg, str int32_t ret = 0; int32_t i = 0; int32_t j = 0; + int32_t k = 0; char filename[256]; struct o_xu_buffers *p_iq = NULL; + uint8_t mu; - if (p_o_xu_cfg->p_buff) { + printf("\n%s\n",__func__); + + if(p_o_xu_cfg->p_buff) + { p_iq = p_o_xu_cfg->p_buff; printf("IQ files size is %d slots\n", p_o_xu_cfg->numSlots); - //printf("numSlots=%u\n", p_o_xu_cfg->numSlots); - //getchar(); - p_iq->iq_playback_buffer_size_dl = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB * - app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, - p_o_xu_cfg->nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA) *4L); - - p_iq->iq_playback_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB * - app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, - p_o_xu_cfg->nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) *4L); - - - /* 10 * [273*32*2*2] = 349440 bytes */ - p_iq->iq_bfw_buffer_size_dl = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * p_o_xu_cfg->antElmTRx * - app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, - p_o_xu_cfg->nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA) *4L); - - /* 10 * [273*32*2*2] = 349440 bytes */ - p_iq->iq_bfw_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * p_o_xu_cfg->antElmTRx * - app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, - p_o_xu_cfg->nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) *4L); - - /* 10 * [1*273*2*2] = 349440 bytes */ - p_iq->iq_srs_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB * - app_xran_get_num_rbs(p_o_xu_cfg->xranTech, p_o_xu_cfg->mu_number, - p_o_xu_cfg->nULBandwidth, p_o_xu_cfg->nULAbsFrePointA)*4L); - - p_iq->numSlots = p_o_xu_cfg->numSlots; - - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - p_iq->p_tx_play_buffer[i] = (int16_t*)malloc(p_iq->iq_playback_buffer_size_dl); - p_iq->tx_play_buffer_size[i] = (int32_t)p_iq->iq_playback_buffer_size_dl; - - if (p_iq->p_tx_play_buffer[i] == NULL) - exit(-1); - - - p_iq->tx_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_file[i], - "DL IFFT IN IQ Samples in binary format", - (uint8_t*)p_iq->p_tx_play_buffer[i], - p_iq->tx_play_buffer_size[i], - 1); - } - - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - - p_iq->p_tx_dl_bfw_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_dl); - p_iq->tx_dl_bfw_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_dl; + mu = 0; + p_iq->iq_dl_bit = 2; + p_iq->iq_ul_bit = 2; + p_iq->iq_bfw_dl_bit = 2; + p_iq->iq_bfw_ul_bit = 2; + p_iq->iq_srs_bit = 2; + p_iq->iq_csirs_bit = 2; + p_iq->iq_prach_bit = 2; - if (p_iq->p_tx_dl_bfw_buffer[i] == NULL) - exit(-1); + if(p_o_xu_cfg->compression == 0 && p_o_xu_cfg->DynamicSectionEna == 1) + { + if(p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].iqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].iqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for DL\n", + p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].iqWidth); + ret = -1; + } + p_iq->iq_dl_bit = p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].iqWidth/8; + } - p_iq->tx_dl_bfw_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->dl_bfw_file[i], - "DL BF weights IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_dl_bfw_buffer[i], - p_iq->tx_dl_bfw_buffer_size[i], - 1); + if(p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].iqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].iqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for UL\n", + p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].iqWidth); + ret = -1; + } + p_iq->iq_ul_bit = p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].iqWidth/8; + } } - } - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - p_iq->p_tx_ul_bfw_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_ul); - p_iq->tx_ul_bfw_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_ul; + if(p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwCompMeth == 0 + && p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwIqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwIqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for DL BFW\n", + p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwIqWidth); + ret = -1; + } + p_iq->iq_bfw_dl_bit = p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwIqWidth/8; + } - if (p_iq->p_tx_ul_bfw_buffer[i] == NULL) - exit(-1); + if(p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].bf_weight.bfwCompMeth == 0 + && p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].bf_weight.bfwIqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].bf_weight.bfwIqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for UL BFW\n", + p_o_xu_cfg->p_PrbMapDl[mu]->prbMap[0].bf_weight.bfwIqWidth); + ret = -1; + } + p_iq->iq_bfw_ul_bit = p_o_xu_cfg->p_PrbMapUl[mu]->prbMap[0].bf_weight.bfwIqWidth/8; + } - p_iq->tx_ul_bfw_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ul_bfw_file[i], - "UL BF weights IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_ul_bfw_buffer[i], - p_iq->tx_ul_bfw_buffer_size[i], - 1); + if(p_o_xu_cfg->p_PrbMapSrs[mu].prbMap[0].compMethod == 0 + && p_o_xu_cfg->p_PrbMapSrs[mu].prbMap[0].iqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapSrs[mu].prbMap[0].iqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for SRS\n", + p_o_xu_cfg->p_PrbMapSrs[mu].prbMap[0].iqWidth); + ret = -1; + } + p_iq->iq_srs_bit = p_o_xu_cfg->p_PrbMapSrs[mu].prbMap[0].iqWidth/8; } - } - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enablePrach) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - p_iq->p_tx_prach_play_buffer[i] = (int16_t*)malloc(PRACH_PLAYBACK_BUFFER_BYTES); - p_iq->tx_prach_play_buffer_size[i] = (int32_t)PRACH_PLAYBACK_BUFFER_BYTES; + if(p_o_xu_cfg->p_PrbMapCsiRs[mu].prbMap[0].compMethod == 0 + && p_o_xu_cfg->p_PrbMapCsiRs[mu].prbMap[0].iqWidth != 0) + { + if((p_o_xu_cfg->p_PrbMapCsiRs[mu].prbMap[0].iqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for CSI-RS\n", + p_o_xu_cfg->p_PrbMapCsiRs[mu].prbMap[0].iqWidth); + ret = -1; + } + p_iq->iq_csirs_bit = p_o_xu_cfg->p_PrbMapCsiRs[mu].prbMap[0].iqWidth/8; + } - if (p_iq->p_tx_prach_play_buffer[i] == NULL) - exit(-1); + if(p_o_xu_cfg->prachCompMethod == 0 && p_o_xu_cfg->prachiqWidth != 0) + { + if((p_o_xu_cfg->prachiqWidth%8) != 0) + { + printf("Invalid Configuration : non compressed %d bits for PRACH\n", + p_o_xu_cfg->prachiqWidth); + ret = -1; + } + p_iq->iq_prach_bit = p_o_xu_cfg->prachiqWidth/8; + } - memset(p_iq->p_tx_prach_play_buffer[i], 0, PRACH_PLAYBACK_BUFFER_BYTES); + if(ret == 0) + printf("Configured I/Q bit width - DL:%d UL%d, DL BFW:%d, UL BFW:%d, SRS:%d, CSIRS:%d, PRACH:%d\n", + p_iq->iq_dl_bit, p_iq->iq_ul_bit, + p_iq->iq_bfw_dl_bit, p_iq->iq_bfw_ul_bit, + p_iq->iq_srs_bit, p_iq->iq_csirs_bit, p_iq->iq_prach_bit); + else + return (ret); - p_iq->tx_prach_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->prach_file[i], - "PRACH IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_prach_play_buffer[i], - p_iq->tx_prach_play_buffer_size[i], - 1); - p_iq->tx_prach_play_buffer_position[i] = 0; - } - } + for(k= 0; k < p_o_xu_cfg->numMu; k++ ) + { + bool isNb375=false; - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs) { - for(i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { + mu = p_o_xu_cfg->mu_number[k]; + if(APP_O_RU == p_o_xu_cfg->appMode && mu == XRAN_NBIOT_MU + && XRAN_NBIOT_UL_SCS_3_75 == p_o_xu_cfg->perMu[mu].nbIotUlScs) + { + isNb375=true; + } + p_iq->iq_playback_buffer_size_dl = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB(isNb375) * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA) * + 4L); + + p_iq->iq_playback_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB(isNb375) * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) * + 4L); + + p_iq->iq_bfw_buffer_size_dl = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * p_o_xu_cfg->antElmTRx * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA) * + 4L); + + p_iq->iq_bfw_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * p_o_xu_cfg->antElmTRx * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) * + 4L); + + p_iq->iq_srs_buffer_size_ul = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB(isNb375) * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) * + 4L); + + p_iq->iq_csirs_buffer_size_dl = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB(isNb375) * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nDLBandwidth, p_o_xu_cfg->nDLAbsFrePointA) * + 4L); + + p_iq->numSlots = p_o_xu_cfg->numSlots; + + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_play_buffer[i] = (int16_t*)malloc(p_iq->iq_playback_buffer_size_dl); + p_iq->buff_perMu[mu].tx_play_buffer_size[i] = (int32_t)p_iq->iq_playback_buffer_size_dl; - p_iq->p_tx_srs_play_buffer[i] = (int16_t*)malloc(p_iq->iq_srs_buffer_size_ul); - p_iq->tx_srs_play_buffer_size[i] = (int32_t)p_iq->iq_srs_buffer_size_ul; + if(p_iq->buff_perMu[mu].p_tx_play_buffer[i] == NULL) + return (-1); - if (p_iq->p_tx_srs_play_buffer[i] == NULL) - exit(-1); + p_iq->buff_perMu[mu].tx_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].ant_file[i], + "DL IFFT IN IQ Samples in binary format", + (uint8_t*)p_iq->buff_perMu[mu].p_tx_play_buffer[i], + p_iq->buff_perMu[mu].tx_play_buffer_size[i], + 1); + } - memset(p_iq->p_tx_srs_play_buffer[i], 0, p_iq->iq_srs_buffer_size_ul); - p_iq->tx_srs_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ul_srs_file[i], - "SRS IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_srs_play_buffer[i], - p_iq->tx_srs_play_buffer_size[i], - 1); + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_dl); + p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_dl; - p_iq->tx_srs_play_buffer_position[i] = 0; - } - } + if (p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i] == NULL) + return (-1); - /* log of ul */ - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { + p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].dl_bfw_file[i], + "DL BF weights IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i], + 1); + } + } - p_iq->p_rx_log_buffer[i] = (int16_t*)malloc(p_iq->iq_playback_buffer_size_ul); - p_iq->rx_log_buffer_size[i] = (int32_t)p_iq->iq_playback_buffer_size_ul; + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_ul); + p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_ul; - if (p_iq->p_rx_log_buffer[i] == NULL) - exit(-1); + if(p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i] == NULL) + return (-1); - memset(p_iq->p_rx_log_buffer[i], 0, p_iq->rx_log_buffer_size[i]); - } + p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].ul_bfw_file[i], + "UL BF weights IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i], + 1); + } + } - /* log of prach */ - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->perMu[mu].prachEnable) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i] = (int16_t*)malloc(PRACH_PLAYBACK_BUFFER_BYTES); + p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i] = (int32_t)PRACH_PLAYBACK_BUFFER_BYTES; - p_iq->p_prach_log_buffer[i] = (int16_t*)malloc(p_o_xu_cfg->numSlots*XRAN_NUM_OF_SYMBOL_PER_SLOT*PRACH_PLAYBACK_BUFFER_BYTES); - p_iq->prach_log_buffer_size[i] = (int32_t)p_o_xu_cfg->numSlots*XRAN_NUM_OF_SYMBOL_PER_SLOT*PRACH_PLAYBACK_BUFFER_BYTES; + if(p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i] == NULL) + return (-1); - if (p_iq->p_prach_log_buffer[i] == NULL) - exit(-1); + memset(p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i], 0, PRACH_PLAYBACK_BUFFER_BYTES); - memset(p_iq->p_prach_log_buffer[i], 0, p_iq->prach_log_buffer_size[i]); - } + p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].prach_file[i], + "PRACH IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i], + p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i], + 1); + p_iq->buff_perMu[mu].tx_prach_play_buffer_position[i] = 0; + } + } - /* log of SRS */ - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { - for(i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs) + { + for(i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) + { + p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i] = (int16_t*)malloc(p_iq->iq_srs_buffer_size_ul); + p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i] = (int32_t)p_iq->iq_srs_buffer_size_ul; - p_iq->p_srs_log_buffer[i] = (int16_t*)malloc(p_iq->iq_srs_buffer_size_ul); - p_iq->srs_log_buffer_size[i] = (int32_t)p_iq->iq_srs_buffer_size_ul; + if(p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i] == NULL) + return (-1); - if (p_iq->p_srs_log_buffer[i] == NULL) - exit(-1); + memset(p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i], 0, p_iq->iq_srs_buffer_size_ul); + p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].ul_srs_file[i], + "SRS IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i], + p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i], + 1); - memset(p_iq->p_srs_log_buffer[i], 0, p_iq->iq_srs_buffer_size_ul); + p_iq->buff_perMu[mu].tx_srs_play_buffer_position[i] = 0; + } } - } - /* log of BFWs */ - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - - p_iq->p_tx_dl_bfw_log_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_dl); - p_iq->tx_dl_bfw_log_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_dl; + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->csirsEnable) + { + for(i = 0; + i < MAX_CSIRS_PORTS_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->nCsiPorts); + i++) + { + p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i] = (int16_t*)malloc(p_iq->iq_csirs_buffer_size_dl); + p_iq->buff_perMu[mu].tx_csirs_play_buffer_size[i] = (int32_t)p_iq->iq_csirs_buffer_size_dl; - if (p_iq->p_tx_dl_bfw_log_buffer[i] == NULL) - exit(-1); + if(p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i] == NULL) + return (-1); - memset(p_iq->p_tx_dl_bfw_log_buffer[i], 0, p_iq->iq_bfw_buffer_size_dl); + memset(p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i], 0, p_iq->iq_csirs_buffer_size_dl); + p_iq->buff_perMu[mu].tx_csirs_play_buffer_size[i] = sys_load_file_to_buff(p_o_xu_cfg->ant_perMu[mu].dl_csirs_file[i], + "CSIRS IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i], + p_iq->buff_perMu[mu].tx_csirs_play_buffer_size[i], 1); + } } - } - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { + /* log of ul */ + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + if(APP_O_DU == p_o_xu_cfg->appMode && mu == XRAN_NBIOT_MU && XRAN_NBIOT_UL_SCS_3_75 ==p_o_xu_cfg->perMu[mu].nbIotUlScs) + { + p_iq->buff_perMu[mu].rx_log_buffer_size[i] = (p_o_xu_cfg->numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB(true) * + app_xran_get_num_rbs(p_o_xu_cfg->xranTech, mu, + p_o_xu_cfg->perMu[mu].nULBandwidth, p_o_xu_cfg->nULAbsFrePointA) *4L); + p_iq->buff_perMu[mu].p_rx_log_buffer[i] = (int16_t*)malloc(p_iq->buff_perMu[mu].rx_log_buffer_size[i]); + } + else + { + p_iq->buff_perMu[mu].p_rx_log_buffer[i] = (int16_t*)malloc(p_iq->iq_playback_buffer_size_ul); + p_iq->buff_perMu[mu].rx_log_buffer_size[i] = (int32_t)p_iq->iq_playback_buffer_size_ul; + } - p_iq->p_tx_ul_bfw_log_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_ul); - p_iq->tx_ul_bfw_log_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_ul; + if(p_iq->buff_perMu[mu].p_rx_log_buffer[i] == NULL) + return (-1); - if (p_iq->p_tx_ul_bfw_log_buffer[i] == NULL) - exit(-1); + memset(p_iq->buff_perMu[mu].p_rx_log_buffer[i], 0, p_iq->buff_perMu[mu].rx_log_buffer_size[i]); + } - memset(p_iq->p_tx_ul_bfw_log_buffer[i], 0, p_iq->iq_bfw_buffer_size_ul); - } - } + /* log of prach */ + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_prach_log_buffer[i] = (int16_t*)malloc(p_o_xu_cfg->numSlots*XRAN_NUM_OF_SYMBOL_PER_SLOT*PRACH_PLAYBACK_BUFFER_BYTES); + p_iq->buff_perMu[mu].prach_log_buffer_size[i] = (int32_t)p_o_xu_cfg->numSlots*XRAN_NUM_OF_SYMBOL_PER_SLOT*PRACH_PLAYBACK_BUFFER_BYTES; - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { + if(p_iq->buff_perMu[mu].p_prach_log_buffer[i] == NULL) + return (-1); - snprintf(filename, sizeof(filename), "./logs/%s%d-play_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "DL IFFT IN IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_play_buffer[i], - p_iq->tx_play_buffer_size[i], - 1); + memset(p_iq->buff_perMu[mu].p_prach_log_buffer[i], 0, p_iq->buff_perMu[mu].prach_log_buffer_size[i]); + } - snprintf(filename, sizeof(filename),"./logs/%s%d-play_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "DL IFFT IN IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_play_buffer[i], - p_iq->tx_play_buffer_size[i]/sizeof(short), - sizeof(short)); + /* log of SRS */ + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) + { + for(i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) + { + p_iq->buff_perMu[mu].p_srs_log_buffer[i] = (int16_t*)malloc(p_iq->iq_srs_buffer_size_ul); + p_iq->buff_perMu[mu].srs_log_buffer_size[i] = (int32_t)p_iq->iq_srs_buffer_size_ul; + if(p_iq->buff_perMu[mu].p_srs_log_buffer[i] == NULL) + return (-1); - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "DL Beamformig weights IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_dl_bfw_buffer[i], - p_iq->tx_dl_bfw_buffer_size[i], - 1); + memset(p_iq->buff_perMu[mu].p_srs_log_buffer[i], 0, p_iq->iq_srs_buffer_size_ul); + } + } - snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "DL Beamformig weightsIQ Samples in binary format", - (uint8_t*) p_iq->p_tx_dl_bfw_buffer[i], - p_iq->tx_dl_bfw_buffer_size[i]/sizeof(short), - sizeof(short)); + /* log of CSI-RS */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->csirsEnable) + { + for(i = 0; + i < MAX_CSIRS_PORTS_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->nCsiPorts); + i++) + { + p_iq->buff_perMu[mu].p_csirs_log_buffer[i] = (int16_t*)malloc(p_iq->iq_csirs_buffer_size_dl); + p_iq->buff_perMu[mu].csirs_log_buffer_size[i] = (int32_t)p_iq->iq_csirs_buffer_size_dl; + if(p_iq->buff_perMu[mu].p_csirs_log_buffer[i] == NULL) + return (-1); - snprintf(filename, sizeof(filename), "./logs/%s%d-ul_bfw_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "UL Beamformig weights IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_ul_bfw_buffer[i], - p_iq->tx_ul_bfw_buffer_size[i], - 1); + memset(p_iq->buff_perMu[mu].p_csirs_log_buffer[i], 0, p_iq->iq_csirs_buffer_size_dl); + } + } - snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "UL Beamformig weightsIQ Samples in binary format", - (uint8_t*) p_iq->p_tx_ul_bfw_buffer[i], - p_iq->tx_ul_bfw_buffer_size[i]/sizeof(short), - sizeof(short)); + /* log of BFWs */ + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_dl); + p_iq->buff_perMu[mu].tx_dl_bfw_log_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_dl; - } - } + if(p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[i] == NULL) + return (-1); - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - for(i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { + memset(p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[i], 0, p_iq->iq_bfw_buffer_size_dl); + } + } - snprintf(filename, sizeof(filename), "./logs/%s%d-play_srs_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "SRS IQ Samples in human readable format", - (uint8_t*)p_iq->p_tx_srs_play_buffer[i], - p_iq->tx_srs_play_buffer_size[i], - 1); + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[i] = (int16_t*)malloc(p_iq->iq_bfw_buffer_size_ul); + p_iq->buff_perMu[mu].tx_ul_bfw_log_buffer_size[i] = (int32_t)p_iq->iq_bfw_buffer_size_ul; - snprintf(filename,sizeof(filename), "./logs/%s%d-play_srs_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "SRS IQ Samples in binary format", - (uint8_t*) p_iq->p_tx_srs_play_buffer[i], - p_iq->tx_srs_play_buffer_size[i]/sizeof(short), - sizeof(short)); - } - } + if(p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[i] == NULL) + return (-1); - if (p_o_xu_cfg->iqswap == 1) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("TX: Swap I and Q to match RU format: [%d]\n",i); - { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_tx_play_buffer[i]; - signed short temp; - - for (j = 0; j < (int32_t)(p_iq->tx_play_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; + memset(p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[i], 0, p_iq->iq_bfw_buffer_size_ul); } } - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - printf("DL BFW: Swap I and Q to match RU format: [%d]\n",i); - { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_tx_dl_bfw_buffer[i]; - signed short temp; - for (j = 0; j < (int32_t)(p_iq->tx_dl_bfw_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; - } + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-play_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-play_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, mu, i); + sys_save_buf_to_file_txt(filename, + "DL IFFT IN IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_play_buffer[i], + p_iq->buff_perMu[mu].tx_play_buffer_size[i], + 1, p_iq->iq_dl_bit); + + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-play_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-play_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, mu, i); + sys_save_buf_to_file(filename, + "DL IFFT IN IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_play_buffer[i], + p_iq->buff_perMu[mu].tx_play_buffer_size[i]/sizeof(short), + sizeof(short)); + + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->perMu[mu].prachEnable) + { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.txt","o-ru",p_o_xu_cfg->o_xu_id,"-play_prach", i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d%s_mu%d_ant%d.txt","o-ru",p_o_xu_cfg->o_xu_id,"-play_prach",mu,i); + sys_save_buf_to_file_txt(filename, + "PRACH IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i], + p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i], + 1, p_iq->iq_prach_bit); } - printf("UL BFW: Swap I and Q to match RU format: [%d]\n",i); + + if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_tx_ul_bfw_buffer[i]; - signed short temp; + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_ue%d.txt", "o-du", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-dl_bfw_ue%d.txt", "o-du", p_o_xu_cfg->o_xu_id, mu, i); + sys_save_buf_to_file_txt(filename, + "DL Beamformig weights IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i], + 1, p_iq->iq_bfw_dl_bit); + + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_ue%d.bin", "o-du",p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-dl_bfw_ue%d.bin", "o-du", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "DL Beamformig weightsIQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i]/sizeof(short), + sizeof(short)); + + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-ul_bfw_ue%d.txt", "o-du", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-ul_bfw_ue%d.txt", "o-du", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "UL Beamformig weights IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i], + 1, p_iq->iq_bfw_ul_bit); + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_ue%d.bin", "o-du", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-ul_bfw_ue%d.bin", "o-du", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "UL Beamformig weightsIQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i], + p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i]/sizeof(short), + sizeof(short)); + } + } - for (j = 0; j < (int32_t)(p_iq->tx_ul_bfw_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; - } + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->csirsEnable && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + for(i = 0; + i < MAX_CSIRS_PORTS_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->nCsiPorts); + i++) + { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-play_csirs_ant%d.txt", "o-du", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-play_csirs_ant%d.txt", "o-du", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "CSI-RS IQ Samples in human readable format", + (uint8_t*)p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i], + p_iq->buff_perMu[mu].tx_csirs_play_buffer_size[i], + 1, p_iq->iq_csirs_bit); + + if(k==0) + snprintf(filename,sizeof(filename), "./logs/%s%d-play_csirs_ant%d.bin", "o-du", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename,sizeof(filename), "./logs/%s%d-mu_%d-play_csirs_ant%d.bin", "o-du", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "CSI-RS IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_csirs_play_buffer[i], + p_iq->buff_perMu[mu].tx_csirs_play_buffer_size[i]/sizeof(short), + sizeof(short)); } } - } - if (p_o_xu_cfg->appMode == APP_O_RU) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("PRACH: Swap I and Q to match RU format: [%d]\n",i); + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + for(i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq-> p_tx_prach_play_buffer[i]; - signed short temp; + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-play_srs_ant%d.txt", "o-ru", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-play_srs_ant%d.txt", "o-ru", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "SRS IQ Samples in human readable format", + (uint8_t*)p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i], + p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i], + 1, p_iq->iq_srs_bit); + + if(k==0) + snprintf(filename,sizeof(filename), "./logs/%s%d-play_srs_ant%d.bin", "o-ru", p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename,sizeof(filename), "./logs/%s%d-mu_%d-play_srs_ant%d.bin", "o-ru", p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "SRS IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i], + p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i]/sizeof(short), + sizeof(short)); + } + } - for (j = 0; j < (int32_t)(p_iq->tx_prach_play_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; + if(p_o_xu_cfg->iqswap == 1) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("TX: Swap I and Q to match RU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_tx_play_buffer[i]; + signed short temp; + + for(j = 0; j < (int32_t)(p_iq->buff_perMu[mu].tx_play_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + printf("DL BFW: Swap I and Q to match RU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i]; + signed short temp; + + for(j = 0; j < (int32_t)(p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } + printf("UL BFW: Swap I and Q to match RU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i]; + signed short temp; + + for(j = 0; j < (int32_t)(p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } } } - } - } - if (p_o_xu_cfg->appMode == APP_O_RU) { - for(i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { - printf("SRS: Swap I and Q to match RU format: [%d]\n",i); + if(p_o_xu_cfg->appMode == APP_O_RU) { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_tx_srs_play_buffer[i]; - signed short temp; + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("PRACH: Swap I and Q to match RU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i]; + signed short temp; + + for (j = 0; j < (int32_t)(p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } + } + } - for (j = 0; j < (int32_t)(p_iq->tx_srs_play_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; + if(p_o_xu_cfg->appMode == APP_O_RU) + { + for(i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) + { + printf("SRS: Swap I and Q to match RU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i]; + signed short temp; + + for(j = 0; j < (int32_t)(p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } } } } - } - } - #if 0 - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - - sprintf(filename, "./logs/swap_IQ_play_ant%d.txt", i); - sys_save_buf_to_file_txt(filename, - "DL IFFT IN IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_play_buffer[i], - p_iq->tx_play_buffer_size[i], - 1); - } -#endif - if (p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("TX: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->tx_play_buffer_size[i]/sizeof(short); j++) { - p_iq->p_tx_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->p_tx_play_buffer[i][j]); + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + sprintf(filename, "./logs/swap_IQ_play_ant%d.txt", i); + sys_save_buf_to_file_txt(filename, + "DL IFFT IN IQ Samples in human readable format", + (uint8_t*) p_iq->p_tx_play_buffer[i], + p_iq->tx_play_buffer_size[i], + 1); } - - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - printf("DL BFW: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->tx_dl_bfw_buffer_size[i]/sizeof(short); j++) { - p_iq->p_tx_dl_bfw_buffer[i][j] = rte_cpu_to_be_16(p_iq->p_tx_dl_bfw_buffer[i][j]); - } - printf("UL BFW: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->tx_ul_bfw_buffer_size[i]/sizeof(short); j++) { - p_iq->p_tx_ul_bfw_buffer[i][j] = rte_cpu_to_be_16(p_iq->p_tx_ul_bfw_buffer[i][j]); +#endif + if(p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + if(p_iq->iq_dl_bit == 2) + { + printf("TX: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); + for(j = 0; j < p_iq->buff_perMu[p_o_xu_cfg->mu_number[k]].tx_play_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[p_o_xu_cfg->mu_number[k]].p_tx_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->buff_perMu[p_o_xu_cfg->mu_number[k]].p_tx_play_buffer[i][j]); + } + } + else + printf("TX: %dbit I/Q for XRAN Ant[%d]\n",p_iq->iq_dl_bit, i); + + if(p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) + { + if(p_iq->iq_bfw_dl_bit == 2) + { + printf("DL BFW: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); + for(j = 0; j < p_iq->buff_perMu[mu].tx_dl_bfw_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i][j] = rte_cpu_to_be_16(p_iq->buff_perMu[mu].p_tx_dl_bfw_buffer[i][j]); + } + } + else + printf("DL BFW: %dbit I/Q for XRAN Ant: [%d]\n", p_iq->iq_bfw_dl_bit, i); + + if(p_iq->iq_bfw_ul_bit == 2) + { + printf("UL BFW: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); + for (j = 0; j < p_iq->buff_perMu[mu].tx_ul_bfw_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i][j] = rte_cpu_to_be_16(p_iq->buff_perMu[mu].p_tx_ul_bfw_buffer[i][j]); + } + } + else + printf("UL BFW: %dbit I/Q for XRAN Ant: [%d]\n", p_iq->iq_bfw_ul_bit, i); + } } - } - } - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enablePrach) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("PRACH: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->tx_prach_play_buffer_size[i]/sizeof(short); j++) { - p_iq->p_tx_prach_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->p_tx_prach_play_buffer[i][j]); + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->perMu[mu].prachEnable + && p_iq->iq_prach_bit == 2) + { + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("PRACH: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); + for(j = 0; j < p_iq->buff_perMu[mu].tx_prach_play_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->buff_perMu[mu].p_tx_prach_play_buffer[i][j]); + } + } } - } - } + else + printf("PRACH: %dbit I/Q for XRAN Ant: [%d]\n", p_iq->iq_prach_bit, i); - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs) { - for(i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { - printf("SRS: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->tx_srs_play_buffer_size[i]/sizeof(short); j++) { - p_iq->p_tx_srs_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->p_tx_srs_play_buffer[i][j]); + if(p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->enableSrs + && p_iq->iq_srs_bit == 2) + { + for(i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) + { + printf("SRS: Convert S16 I and S16 Q to network byte order for XRAN Ant: [%d]\n",i); + for(j = 0; j < p_iq->buff_perMu[mu].tx_srs_play_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i][j] = rte_cpu_to_be_16(p_iq->buff_perMu[mu].p_tx_srs_play_buffer[i][j]); + } + } } - } - } - - } + else + printf("SRS: %dbit I/Q for XRAN Ant: [%d]\n",p_iq->iq_srs_bit ,i); + } #if 0 - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - - sprintf(filename, "./logs/swap_be_play_ant%d.txt", i); - sys_save_buf_to_file_txt(filename, - "DL IFFT IN IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_play_buffer[i], - p_iq->tx_play_buffer_size[i], - 1); - } + for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + sprintf(filename, "./logs/swap_be_play_ant%d.txt", i); + sys_save_buf_to_file_txt(filename, + "DL IFFT IN IQ Samples in human readable format", + (uint8_t*) p_iq->p_tx_play_buffer[i], + p_iq->tx_play_buffer_size[i], + 1); + } #endif + }/*Mixed Numerology loop*/ } return ret; @@ -953,184 +1311,271 @@ app_dump_o_xu_buffers(UsecaseConfig* p_use_cfg, RuntimeConfig* p_o_xu_cfg) exit(-1); } - if (p_o_xu_cfg->iqswap == 1) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("RX: Swap I and Q to match CPU format: [%d]\n",i); - { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_rx_log_buffer[i]; - signed short temp; - - for (j = 0; j < (int32_t)(p_iq->rx_log_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; - } - } - } - - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { - for (i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { - printf("SRS: Swap I and Q to match CPU format: [%d]\n",i); + int32_t k = 0; + for(k = 0; k < p_o_xu_cfg->numMu; k++) { + uint8_t mu = p_o_xu_cfg->mu_number[k]; + if (p_o_xu_cfg->iqswap == 1) { + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { + printf("RX: Swap I and Q to match CPU format: [%d]\n",i); { /* swap I and Q */ int32_t j; - signed short *ptr = (signed short *) p_iq->p_srs_log_buffer[i]; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_rx_log_buffer[i]; signed short temp; - for (j = 0; j < (int32_t)(p_iq->srs_log_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; + for (j = 0; j < (int32_t)(p_iq->buff_perMu[mu].rx_log_buffer_size[i]/sizeof(short)) ; j = j + 2) { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; } } } - } - } - if (p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) { + if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { + for (i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) { + printf("SRS: Swap I and Q to match CPU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_srs_log_buffer[i]; + signed short temp; + + for (j = 0; j < (int32_t)(p_iq->buff_perMu[mu].srs_log_buffer_size[i]/sizeof(short)) ; j = j + 2) { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } + } + } + } + } - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("RX: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->rx_log_buffer_size[i]/sizeof(short); j++) { - p_iq->p_rx_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->p_rx_log_buffer[i][j]); + if (p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) + { + if(p_iq->iq_ul_bit == 2) + { + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("RX: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); + for (j = 0; j < p_iq->buff_perMu[mu].rx_log_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_rx_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->buff_perMu[mu].p_rx_log_buffer[i][j]); + } + } } - } + else + printf("RX: %dbits I/Q from XRAN Ant: [%d]\n",p_iq->iq_ul_bit, i); - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { - for (i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { - printf("SRS: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->srs_log_buffer_size[i]/sizeof(short); j++) { - p_iq->p_srs_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->p_srs_log_buffer[i][j]); + if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs + && p_iq->iq_srs_bit == 2) + { + for (i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) + { + printf("SRS: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); + for (j = 0; j < p_iq->buff_perMu[mu].srs_log_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_srs_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->buff_perMu[mu].p_srs_log_buffer[i][j]); + } } } + else + printf("SRS: %dbits I/Q from XRAN Ant: [%d]\n",p_iq->iq_srs_bit, i); } - } - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - snprintf(filename, sizeof(filename), "./logs/%s%d-rx_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "UL FFT OUT IQ Samples in human readable format", - (uint8_t*) p_iq->p_rx_log_buffer[i], - p_iq->rx_log_buffer_size[i], - 1); + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("Ant %d RX size : %d\n", i, p_iq->buff_perMu[mu].rx_log_buffer_size[i]); - snprintf(filename, sizeof(filename), "./logs/%s%d-rx_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "UL FFT OUT IQ Samples in binary format", - (uint8_t*) p_iq->p_rx_log_buffer[i], - p_iq->rx_log_buffer_size[i]/sizeof(short), - sizeof(short)); + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-rx_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-rx_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); sys_save_buf_to_file_txt(filename, - "DL Beamformig weights IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_dl_bfw_log_buffer[i], - p_iq->tx_dl_bfw_log_buffer_size[i], - 1); + "UL FFT OUT IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_rx_log_buffer[i], + p_iq->buff_perMu[mu].rx_log_buffer_size[i], + 1, p_iq->iq_ul_bit); - snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id, i); + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-rx_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-rx_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); sys_save_buf_to_file(filename, - "DL Beamformig weightsIQ Samples in binary format", - (uint8_t*) p_iq->p_tx_dl_bfw_log_buffer[i], - p_iq->tx_dl_bfw_log_buffer_size[i]/sizeof(short), + "UL FFT OUT IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_rx_log_buffer[i], + p_iq->buff_perMu[mu].rx_log_buffer_size[i]/sizeof(short), sizeof(short)); - } - if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { - snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "DL Beamformig weights IQ Samples in human readable format", - (uint8_t*) p_iq->p_tx_ul_bfw_log_buffer[i], - p_iq->tx_ul_bfw_log_buffer_size[i], - 1); + if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-dl_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "DL Beamformig weights IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[i], + p_iq->buff_perMu[mu].tx_dl_bfw_log_buffer_size[i], + 1, p_iq->iq_bfw_dl_bit); + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-dl_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-dl_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "DL Beamformig weightsIQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_dl_bfw_log_buffer[i], + p_iq->buff_perMu[mu].tx_dl_bfw_log_buffer_size[i]/sizeof(short), + sizeof(short)); - snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "DL Beamformig weightsIQ Samples in binary format", - (uint8_t*) p_iq->p_tx_ul_bfw_log_buffer[i], - p_iq->tx_ul_bfw_log_buffer_size[i]/sizeof(short), - sizeof(short)); + } + if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->xranCat == XRAN_CATEGORY_B) { + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-ul_bfw_log_ue%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "DL Beamformig weights IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[i], + p_iq->buff_perMu[mu].tx_ul_bfw_log_buffer_size[i], + 1, p_iq->iq_bfw_ul_bit); + + if(k==0) + snprintf(filename, sizeof(filename),"./logs/%s%d-ul_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename),"./logs/%s%d-mu_%d-ul_bfw_log_ue%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"),p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "DL Beamformig weightsIQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_tx_ul_bfw_log_buffer[i], + p_iq->buff_perMu[mu].tx_ul_bfw_log_buffer_size[i]/sizeof(short), + sizeof(short)); + } } - } - - if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { - for (i = 0; - i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); - i++) { - snprintf(filename, sizeof(filename), "./logs/%s%d-srs_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file_txt(filename, - "SRS UL FFT OUT IQ Samples in human readable format", - (uint8_t*)p_iq-> p_srs_log_buffer[i], - p_iq->srs_log_buffer_size[i], - 1); + if (p_o_xu_cfg->appMode == APP_O_DU && p_o_xu_cfg->enableSrs) { + for (i = 0; + i < MAX_ANT_CARRIER_SUPPORTED_CAT_B && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->antElmTRx); + i++) { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-srs_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-srs_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "SRS UL FFT OUT IQ Samples in human readable format", + (uint8_t*)p_iq->buff_perMu[mu].p_srs_log_buffer[i], + p_iq->buff_perMu[mu].srs_log_buffer_size[i], + 1, p_iq->iq_srs_bit); + + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-srs_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-srs_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "SRS UL FFT OUT IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_srs_log_buffer[i], + p_iq->buff_perMu[mu].srs_log_buffer_size[i]/sizeof(short), + sizeof(short)); + } + } - snprintf(filename, sizeof(filename), "./logs/%s%d-srs_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); - sys_save_buf_to_file(filename, - "SRS UL FFT OUT IQ Samples in binary format", - (uint8_t*) p_iq->p_srs_log_buffer[i], - p_iq->srs_log_buffer_size[i]/sizeof(short), - sizeof(short)); + if (p_o_xu_cfg->appMode == APP_O_RU && p_o_xu_cfg->csirsEnable) { + for (i = 0; + i < MAX_CSIRS_PORTS_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->nCsiPorts); + i++) { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-csirs_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-csirs_log_ant%d.txt",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file_txt(filename, + "CSI-RS DL FFT OUT IQ Samples in human readable format", + (uint8_t*)p_iq->buff_perMu[mu].p_csirs_log_buffer[i], + p_iq->buff_perMu[mu].csirs_log_buffer_size[i], + 1, p_iq->iq_csirs_bit); + + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d-csirs_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id, i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d-mu_%d-csirs_log_ant%d.bin",((p_o_xu_cfg->appMode == APP_O_DU) ? "o-du" : "o-ru"), p_o_xu_cfg->o_xu_id,mu,i); + sys_save_buf_to_file(filename, + "CSI-RS DL FFT OUT IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_csirs_log_buffer[i], + p_iq->buff_perMu[mu].csirs_log_buffer_size[i]/sizeof(short), + sizeof(short)); + } } - } - if (p_o_xu_cfg->enablePrach) { - if (p_o_xu_cfg->iqswap == 1) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("PRACH: Swap I and Q to match CPU format: [%d]\n",i); + if (p_o_xu_cfg->perMu[mu].prachEnable) + { + if (p_o_xu_cfg->iqswap == 1) + { + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - /* swap I and Q */ - int32_t j; - signed short *ptr = (signed short *) p_iq->p_prach_log_buffer[i]; - signed short temp; - - for (j = 0; j < (int32_t)(p_iq->prach_log_buffer_size[i]/sizeof(short)) ; j = j + 2) { - temp = ptr[j]; - ptr[j] = ptr[j + 1]; - ptr[j + 1] = temp; + printf("PRACH: Swap I and Q to match CPU format: [%d]\n",i); + { + /* swap I and Q */ + int32_t j; + signed short *ptr = (signed short *) p_iq->buff_perMu[mu].p_prach_log_buffer[i]; + signed short temp; + + for (j = 0; j < (int32_t)(p_iq->buff_perMu[mu].prach_log_buffer_size[i]/sizeof(short)) ; j = j + 2) + { + temp = ptr[j]; + ptr[j] = ptr[j + 1]; + ptr[j + 1] = temp; + } } } } - } - if (p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) { - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - printf("PRACH: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); - for (j = 0; j < p_iq->prach_log_buffer_size[i]/sizeof(short); j++) { - p_iq->p_prach_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->p_prach_log_buffer[i][j]); + if (p_o_xu_cfg->nebyteorderswap == 1 && p_o_xu_cfg->compression == 0) + { + if(p_iq->iq_prach_bit == 2) + { + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + printf("PRACH: Convert S16 I and S16 Q to cpu byte order from XRAN Ant: [%d]\n",i); + for (j = 0; j < p_iq->buff_perMu[mu].prach_log_buffer_size[i]/sizeof(short); j++) + { + p_iq->buff_perMu[mu].p_prach_log_buffer[i][j] = rte_be_to_cpu_16(p_iq->buff_perMu[mu].p_prach_log_buffer[i][j]); + } + } } + else + printf("PRACH: %dbits I/Q from XRAN Ant: [%d]\n", p_iq->iq_prach_bit, i); } - } - - for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) { - if (p_o_xu_cfg->appMode == APP_O_DU) - snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.txt","o-du",p_o_xu_cfg->o_xu_id,"-prach_log", i); - else - snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.txt","o-ru",p_o_xu_cfg->o_xu_id,"-play_prach", i); - sys_save_buf_to_file_txt(filename, - "PRACH IQ Samples in human readable format", - (uint8_t*) p_iq->p_prach_log_buffer[i], - p_iq->prach_log_buffer_size[i], - 1); + for (i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(p_o_xu_cfg->numCC * p_o_xu_cfg->numAxc); i++) + { + if (p_o_xu_cfg->appMode == APP_O_DU) + { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.txt","o-du",p_o_xu_cfg->o_xu_id,"-prach_log", i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d%s_mu%d_ant%d.txt","o-du",p_o_xu_cfg->o_xu_id,"-prach_log",mu,i); + } + sys_save_buf_to_file_txt(filename, + "PRACH IQ Samples in human readable format", + (uint8_t*) p_iq->buff_perMu[mu].p_prach_log_buffer[i], + p_iq->buff_perMu[mu].prach_log_buffer_size[i], + 1, p_iq->iq_prach_bit); - if (p_o_xu_cfg->appMode == APP_O_DU) - snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.bin","o-du",p_o_xu_cfg->o_xu_id,"-prach_log", i); - else - snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.bin","o-ru",p_o_xu_cfg->o_xu_id,"-play_prach", i); - sys_save_buf_to_file(filename, - "PRACH IQ Samples in binary format", - (uint8_t*) p_iq->p_prach_log_buffer[i], - p_iq->prach_log_buffer_size[i]/sizeof(short), - sizeof(short)); + if (p_o_xu_cfg->appMode == APP_O_DU) + { + if(k==0) + snprintf(filename, sizeof(filename), "./logs/%s%d%s_ant%d.bin","o-du",p_o_xu_cfg->o_xu_id,"-prach_log", i); + else + snprintf(filename, sizeof(filename), "./logs/%s%d%s_mu%d_ant%d.bin","o-du",p_o_xu_cfg->o_xu_id,"-prach_log",mu,i); + } + sys_save_buf_to_file(filename, + "PRACH IQ Samples in binary format", + (uint8_t*) p_iq->buff_perMu[mu].p_prach_log_buffer[i], + p_iq->buff_perMu[mu].prach_log_buffer_size[i]/sizeof(short), + sizeof(short)); + } } } return ret; @@ -1195,6 +1640,62 @@ app_alloc_all_cfgs(void) return 0; } +xran_active_numerologies_per_tti activeMu[XRAN_PORTS_NUM]; + +int32_t app_stop(void) +{ + int o_xu_id; + + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + xran_stop(app_io_xran_handle[o_xu_id]); + } + printf("Stop XRAN traffic\n"); + state = APP_STOPPED; + return 0; +} + +#define APP_PRINT_NON_ZERO_STATS(string,val) \ + if(val != 0) \ + { \ + printf(string,val); \ + } + +void app_print_eth_stats(uint8_t numVfs) +{ + uint8_t i; + struct rte_eth_stats stats; + + printf("eth stats"); + for(i=0; i < numVfs; ++i) + { + stats.ierrors = 0; + stats.oerrors = 0; + stats.ipackets = 0; + stats.opackets = 0; + stats.rx_nombuf = 0; + stats.imissed = 0; + + if(rte_eth_stats_get(i, &stats)) + { + // printf("\nrte_eth_stats_get failed: %hhu",i); + continue; + } + + printf("\n%.1hhu : ",i); + APP_PRINT_NON_ZERO_STATS("ipackets %lu ", stats.ipackets); + APP_PRINT_NON_ZERO_STATS("opackets %lu ", stats.opackets); + APP_PRINT_NON_ZERO_STATS("ierrors %lu ", stats.ierrors); + APP_PRINT_NON_ZERO_STATS("oerrors %lu ", stats.oerrors); + APP_PRINT_NON_ZERO_STATS("imissed %lu ",stats.imissed); + APP_PRINT_NON_ZERO_STATS("rx_nombuf %lu ", stats.rx_nombuf); + + } + printf("\n\n"); + + return; +} + int main(int argc, char *argv[]) { int32_t o_xu_id = 0; @@ -1211,8 +1712,16 @@ int main(int argc, char *argv[]) uint32_t nCoreUsedNum[64]; //float nUsedPercent; + if(XRAN_N_FE_BUF_LEN < 10) + { + printf("XRAN_N_FE_BUF_LEN is small to run sample-app! [%d]\n", XRAN_N_FE_BUF_LEN); + printf("Please re-build the application after clean!!!\n"); + exit(-1); + } + app_version_print(); app_timer_set_tsc_freq_from_clock(); + xran_mem_mgr_leak_detector_init(); if (xran_is_synchronized() != 0) printf("Machine is not synchronized using PTP!\n"); @@ -1238,39 +1747,58 @@ int main(int argc, char *argv[]) printf("app_parse_all_cfgs failed %d\n", xret); exit(-1); } + #ifdef FWK_ENABLED - if(p_usecaseConfiguration->bbu_offload) { - if(p_startupConfiguration[0]->appMode == APP_O_DU) { - if ((xret = app_bbu_init(argc, argv, p_usecaseConfiguration->o_xu_bbu_cfg_file, p_usecaseConfiguration, p_startupConfiguration, - nActiveCoreMask)) < 0) { - printf("app_bbu_init failed %d\n", xret); - } + if(p_usecaseConfiguration->bbu_offload) + { + uint32_t i; + uint64_t nMask = 1; + int ioWorkerCount; + uint64_t ioWorker, ioWorker64_127; + + if ((xret = app_bbu_init(argc, argv, p_usecaseConfiguration->o_xu_bbu_cfg_file, p_usecaseConfiguration, p_startupConfiguration, + nActiveCoreMask)) < 0) + { + printf("app_bbu_init failed %d\n", xret); + } + + /* TO DO: ioWorkerCount should be same for DU and RU. Fix RU. */ + if(p_usecaseConfiguration->appMode == APP_O_DU) + ioWorkerCount=4; /* Allocate 4 IO worker cores for FH. So total FH cores will be 5 (1 timing + 4 workers) */ + else + ioWorkerCount=4; - uint32_t i; - uint64_t nMask = 1; - /* use only 1 worker for BBU offload */ - for (i = 0; i < 64; i++) + ioWorker = p_usecaseConfiguration->io_worker; + ioWorker64_127 = p_usecaseConfiguration->io_worker_64_127; + p_usecaseConfiguration->io_worker = 0; + p_usecaseConfiguration->io_worker_64_127= 0; + + for (i = 0; i < 64 && ioWorkerCount!=0; i++) + { + if(p_usecaseConfiguration->io_core < 64) { - if(p_usecaseConfiguration->io_core < 64) { - if (nMask & p_usecaseConfiguration->io_worker) { - p_usecaseConfiguration->io_worker = nMask; - p_usecaseConfiguration->io_worker_64_127 = 0; - break; - } + if (nMask & ioWorker) + { + p_usecaseConfiguration->io_worker |= nMask; + p_usecaseConfiguration->io_worker_64_127 = 0; + ioWorkerCount--; } - if(p_usecaseConfiguration->io_core >= 64) { - if (nMask & p_usecaseConfiguration->io_worker_64_127) { - p_usecaseConfiguration->io_worker_64_127 = nMask; - p_usecaseConfiguration->io_worker = 0; - break; - } + } + if(p_usecaseConfiguration->io_core >= 64) + { + if (nMask & ioWorker64_127) { + p_usecaseConfiguration->io_worker_64_127 |= nMask; + p_usecaseConfiguration->io_worker = 0; + ioWorkerCount--; } - nMask = nMask << 1; } + nMask = nMask << 1; } } #endif - if ((xret = app_set_main_core(p_usecaseConfiguration)) < 0) { + + if ((xret = app_set_main_core(p_usecaseConfiguration)) < 0) + { printf("app_set_main_core failed %d\n", xret); exit(-1); } @@ -1278,17 +1806,35 @@ int main(int argc, char *argv[]) app_io_xran_if_alloc(); /* one init for all O-XU */ - app_io_xran_fh_init_init(p_usecaseConfiguration, p_startupConfiguration[0], &app_io_xran_fh_init); - xret = xran_init(argc, argv, &app_io_xran_fh_init, argv[0], &app_io_xran_handle); - if (xret != XRAN_STATUS_SUCCESS) { + if(app_io_xran_fh_init_init(p_usecaseConfiguration, p_startupConfiguration[0], &app_io_xran_fh_init) != 0) + { + printf("\n%s:%d: app_io_xran_fh_init_init failed",__func__, __LINE__); + exit(-1); + } + + app_io_xran_fh_init.dpdkVfioVfToken = dpdkVfioVfToken; + xret = xran_init(argc, argv, &app_io_xran_fh_init, argv[0], app_io_xran_handle); + if (xret != XRAN_STATUS_SUCCESS) + { printf("xran_init failed %d\n", xret); exit(-1); } - if (app_io_xran_handle == NULL) - exit(1); + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + if(app_io_xran_handle[o_xu_id] == NULL) + { + printf("xran_init failed %d\n", xret); + exit(1); + } + else + { + printf("RU%d Handle = %p\n", o_xu_id, app_io_xran_handle[o_xu_id]); + } + } - if (stat("./logs", &st) == -1) { + if (stat("./logs", &st) == -1) + { mkdir("./logs", 0777); } @@ -1296,7 +1842,7 @@ int main(int argc, char *argv[]) /* Init mlog */ unsigned int mlogSubframes = 128; - unsigned int mlogCores = 32; + unsigned int mlogCores = sysconf(_SC_NPROCESSORS_ONLN); unsigned int mlogSize = 10000; // Open Mlog Buffers and initalize variables @@ -1309,9 +1855,10 @@ int main(int argc, char *argv[]) uint32_t totalCC = 0; + uint32_t tcore = 1 << app_io_xran_fh_init.io_cfg.timing_core; - if(((1 << app_io_xran_fh_init.io_cfg.timing_core) | app_io_xran_fh_init.io_cfg.pkt_proc_core) & nActiveCoreMask[0]) - rte_panic("[0 - 63] BBU and IO cores conflict\n"); + if((tcore | app_io_xran_fh_init.io_cfg.pkt_proc_core) & nActiveCoreMask[0]) + rte_panic("[0 - 63] BBU and IO cores conflict %lx <-> %lx\n", ((1 << app_io_xran_fh_init.io_cfg.timing_core) | app_io_xran_fh_init.io_cfg.pkt_proc_core), nActiveCoreMask[0]); if(app_io_xran_fh_init.io_cfg.pkt_proc_core_64_127 & nActiveCoreMask[1]) rte_panic("[64-127] BBU and IO cores conflict\n"); @@ -1320,135 +1867,256 @@ int main(int argc, char *argv[]) MLogSetup(nActiveCoreMask[0], nActiveCoreMask[1], nActiveCoreMask[2], nActiveCoreMask[3]); - for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) { + for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { RuntimeConfig* p_o_xu_cfg = p_startupConfiguration[o_xu_id]; totalCC += p_o_xu_cfg->numCC; } MLogAddTestCase(nActiveCoreMask, totalCC); + /* Get the OXU-id for max numerology */ + uint8_t o_xu_id_maxMu = 0; + uint8_t max_mu; + uint8_t mu_idx; + + max_mu = p_startupConfiguration[0]->mu_number[0]; + if(max_mu == XRAN_NBIOT_MU) + max_mu = 0; + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; ++o_xu_id) + { + for(mu_idx = 0; mu_idx < p_startupConfiguration[o_xu_id]->numMu; ++mu_idx) + { + if(p_startupConfiguration[o_xu_id]->mu_number[mu_idx] != XRAN_NBIOT_MU && + p_startupConfiguration[o_xu_id]->mu_number[mu_idx] > max_mu) + { + max_mu = p_startupConfiguration[o_xu_id]->mu_number[mu_idx]; + o_xu_id_maxMu = o_xu_id; + } + } + } + printf("O-RU%hhu has highest numerology - %hhu\n",o_xu_id_maxMu, max_mu); + /** process all the O-RU|O-DU for use case */ - for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) { + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { RuntimeConfig* p_o_xu_cfg = p_startupConfiguration[o_xu_id]; - if (o_xu_id == 0) - app_io_xran_buffers_max_sz_set(p_o_xu_cfg); + app_io_xran_buffers_max_sz_set(p_o_xu_cfg); - if (p_o_xu_cfg->ant_file[0] == NULL) { + if(strlen(p_o_xu_cfg->ant_perMu[p_o_xu_cfg->mu_number[0]].ant_file[0]) == 0) + { printf("it looks like test vector for antennas were not provided\n"); exit(-1); } - if (p_o_xu_cfg->numCC > XRAN_MAX_SECTOR_NR) { + if(p_o_xu_cfg->numCC > XRAN_MAX_SECTOR_NR) + { printf("Number of cells %d exceeds max number supported %d!\n", p_o_xu_cfg->numCC, XRAN_MAX_SECTOR_NR); p_o_xu_cfg->numCC = XRAN_MAX_SECTOR_NR; - } - if (p_o_xu_cfg->antElmTRx > XRAN_MAX_ANT_ARRAY_ELM_NR) { + if(p_o_xu_cfg->antElmTRx > XRAN_MAX_ANT_ARRAY_ELM_NR) + { printf("Number of Antenna elements %d exceeds max number supported %d!\n", p_o_xu_cfg->antElmTRx, XRAN_MAX_ANT_ARRAY_ELM_NR); p_o_xu_cfg->antElmTRx = XRAN_MAX_ANT_ARRAY_ELM_NR; } printf("Numm CC %d numAxc %d numUlAxc %d\n", p_o_xu_cfg->numCC, p_o_xu_cfg->numAxc, p_o_xu_cfg->numUlAxc); - app_setup_o_xu_buffers(p_usecaseConfiguration, p_o_xu_cfg, &app_io_xran_fh_init); + if(app_setup_o_xu_buffers(p_usecaseConfiguration, p_o_xu_cfg, &app_io_xran_fh_init) < 0) + { + printf("Failed to initialize I/Q buffers!!\n"); + exit(-1); + } app_io_xran_fh_config_init(p_usecaseConfiguration, p_o_xu_cfg, &app_io_xran_fh_init, &app_io_xran_fh_config[o_xu_id]); - xret = xran_open(app_io_xran_handle, &app_io_xran_fh_config[o_xu_id]); - if(xret != XRAN_STATUS_SUCCESS){ - printf("xran_open failed %d\n", xret); - exit(-1); - } - if (app_io_xran_interface(o_xu_id, p_startupConfiguration[o_xu_id], p_usecaseConfiguration, &app_io_xran_fh_init) != 0) + uint8_t mu; + for(uint8_t l=0; lbbu_offload){ + pCtx->pFn=app_bbu_polling_event_gen; + eBbuPoolHandler pHandler = app_get_ebbu_pool_handler(); + pHandler->nPollEbbuOffloadFlag = 1; + } + else + { + printf("[ERROR]EBBUPool framework is not enabled but macro POLL_EBBU_OFFLOAD is defined!\n"); + exit(-1); + } +#endif + + xret = xran_open(app_io_xran_handle[o_xu_id], &app_io_xran_fh_config[o_xu_id]); + if(xret != XRAN_STATUS_SUCCESS) + { + printf("xran_open failed %d\n", xret); + exit(-1); + } + + if(app_io_xran_interface(o_xu_id, p_startupConfiguration[o_xu_id], p_usecaseConfiguration, &app_io_xran_fh_init) != 0) exit(-1); app_io_xran_iq_content_init(o_xu_id, p_startupConfiguration[o_xu_id]); + #ifdef FWK_ENABLED - if(p_o_xu_cfg->appMode == APP_O_DU && p_usecaseConfiguration->bbu_offload) { - if ((xret = xran_reg_physide_cb(app_io_xran_handle, app_bbu_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) { - printf("xran_reg_physide_cb failed %d\n", xret); - exit(-1); + if(p_usecaseConfiguration->bbu_offload) + { + if(p_o_xu_cfg->appMode == APP_O_DU) + { + if((xret = xran_timingsource_reg_tticb(NULL, app_bbu_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); + exit(-1); + } } - } else { - if ((xret = xran_reg_physide_cb(app_io_xran_handle, app_io_xran_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) { - printf("xran_reg_physide_cb failed %d\n", xret); + else if(p_o_xu_cfg->appMode == APP_O_RU) + { + if((xret = xran_timingsource_reg_tticb(NULL, app_bbu_ul_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); + exit(-1); + } + } + } + else + { + if((xret = xran_timingsource_reg_tticb(NULL, app_io_xran_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); exit(-1); } } #else - if ((xret = xran_reg_physide_cb(app_io_xran_handle, app_io_xran_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) { - printf("xran_reg_physide_cb failed %d\n", xret); + if((xret = xran_timingsource_reg_tticb(NULL, app_io_xran_dl_tti_call_back, NULL, 10, XRAN_CB_TTI)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); exit(-1); } #endif - if ((xret = xran_reg_physide_cb(app_io_xran_handle, app_io_xran_ul_half_slot_call_back, NULL, 10, XRAN_CB_HALF_SLOT_RX)) != XRAN_STATUS_SUCCESS) { - printf("xran_reg_physide_cb failed %d\n", xret); + if((xret = xran_timingsource_reg_tticb(NULL, app_io_xran_ul_half_slot_call_back, NULL, 10, XRAN_CB_HALF_SLOT_RX)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); exit(-1); } - if ((xret = xran_reg_physide_cb(app_io_xran_handle, app_io_xran_ul_full_slot_call_back, NULL, 10, XRAN_CB_FULL_SLOT_RX)) != XRAN_STATUS_SUCCESS) { - printf("xran_reg_physide_cb failed %d\n", xret); + if((xret = xran_timingsource_reg_tticb(NULL, app_io_xran_ul_full_slot_call_back, NULL, 10, XRAN_CB_FULL_SLOT_RX)) != XRAN_STATUS_SUCCESS) + { + printf("xran_timingsource_reg_tticb failed %d\n", xret); exit(-1); } #ifdef TEST_SYM_CBS - if ((xret = xran_reg_sym_cb(app_io_xran_handle, app_io_xran_ul_custom_sym_call_back, + if((xret = xran_reg_sym_cb(app_io_xran_handle[0], app_io_xran_ul_custom_sym_call_back, (void*)&cb_sym_ctx[0].cb_param, &cb_sym_ctx[0].sense_of_time, - 3, XRAN_CB_SYM_RX_WIN_BEGIN)) != XRAN_STATUS_SUCCESS) { + 3, XRAN_CB_SYM_RX_WIN_BEGIN)) != XRAN_STATUS_SUCCESS, XRAN_DEFAULT_MU) + { printf("xran_reg_sym_cb failed %d\n", xret); exit(-1); } - if ((xret = xran_reg_sym_cb(app_io_xran_handle, app_io_xran_ul_custom_sym_call_back, + if((xret = xran_reg_sym_cb(app_io_xran_handle[0], app_io_xran_ul_custom_sym_call_back, (void*)&cb_sym_ctx[1].cb_param, &cb_sym_ctx[1].sense_of_time, - 3, XRAN_CB_SYM_RX_WIN_END)) != XRAN_STATUS_SUCCESS) { + 3, XRAN_CB_SYM_RX_WIN_END)) != XRAN_STATUS_SUCCESS, XRAN_DEFAULT_MU) + { printf("xran_reg_sym_cb failed %d\n", xret); exit(-1); } - if ((xret = xran_reg_sym_cb(app_io_xran_handle, app_io_xran_ul_custom_sym_call_back, + if((xret = xran_reg_sym_cb(app_io_xran_handle[0], app_io_xran_ul_custom_sym_call_back, (void*)&cb_sym_ctx[2].cb_param, &cb_sym_ctx[2].sense_of_time, - 3, XRAN_CB_SYM_TX_WIN_BEGIN)) != XRAN_STATUS_SUCCESS) { + 3, XRAN_CB_SYM_TX_WIN_BEGIN)) != XRAN_STATUS_SUCCESS, XRAN_DEFAULT_MU) + { printf("xran_reg_sym_cb failed %d\n", xret); exit(-1); } - if ((xret = xran_reg_sym_cb(app_io_xran_handle, app_io_xran_ul_custom_sym_call_back, + if((xret = xran_reg_sym_cb(app_io_xran_handle[0], app_io_xran_ul_custom_sym_call_back, (void*)&cb_sym_ctx[3].cb_param, &cb_sym_ctx[3].sense_of_time, - 3, XRAN_CB_SYM_TX_WIN_END)) != XRAN_STATUS_SUCCESS) { + 3, XRAN_CB_SYM_TX_WIN_END)) != XRAN_STATUS_SUCCESS, XRAN_DEFAULT_MU) + { printf("xran_reg_sym_cb failed %d\n", xret); exit(-1); } #endif } + if(xran_timingsource_get_threadstate() == XRAN_TMTHREAD_STAT_STOP) + { +#ifdef POLL_EBBU_OFFLOAD + PXRAN_TIMER_CTX pCtx = xran_timer_get_ctx_ebbu_offload(); + pCtx->pFn = ebbu_pool_polling_event_gen; +#endif + xran_timingsource_set_numerology(max_mu); + xret = xran_timingsource_start(); + if(xret != 0) + { + printf("xran_timingsource_start failed.\n"); + return xret; + } + } + xret = xran_start_worker_threads(); + if(xret != XRAN_STATUS_SUCCESS) + { + printf("xran_start_worker_threads failed %d\n", xret); + exit(-1); + } + xran_mem_mgr_leak_detector_display(0); fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); - state = APP_RUNNING; - printf("Start XRAN traffic\n"); - xran_start(app_io_xran_handle); + if(arg_params.manual_start == 0) + { + state = APP_RUNNING; + for(o_xu_id=0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + RuntimeConfig *p_o_xu_cfg = p_startupConfiguration[o_xu_id]; + int cc_id; + + printf("Start RU%d!\n", o_xu_id); + xran_start(app_io_xran_handle[o_xu_id]); + + for(cc_id=0; cc_id < p_o_xu_cfg->numCC; cc_id++) + { + printf("Activate RU%d CC%d!\n", o_xu_id, cc_id); + xran_activate_cc(o_xu_id, cc_id); + } + } + printf("Start XRAN traffic\n"); + } + app_print_menu(); struct xran_common_counters x_counters[XRAN_PORTS_NUM]; int is_mlog_on = 0; - for (;;) { + while(state == APP_RUNNING) + { char input[10]; sleep(1); xran_curr_if_state = xran_get_if_state(); + // printf("p_xran_dev_ctx->timing_source_thread_running = %d\n",p_xran_dev_ctx->timing_source_thread_running); - if (xran_get_common_counters(app_io_xran_handle, &x_counters[0]) == XRAN_STATUS_SUCCESS) { - for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) { - if (o_xu_id == 0) { - xran_get_time_stats(&nTotalTime, &nUsedTime, &nCoresUsed, nCoreUsedNum, 1); + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + if(xran_get_common_counters(app_io_xran_handle[o_xu_id], &x_counters[o_xu_id]) == XRAN_STATUS_SUCCESS) + { + if (o_xu_id == 0) + { + xran_timingsource_get_timestats(&nTotalTime, &nUsedTime, &nCoresUsed, nCoreUsedNum, 1); //nUsedPercent = 0.0; //if (nTotalTime) { // nUsedPercent = ((float)nUsedTime * 100.0) / (float)nTotalTime; //} mlog_times.core_total_time += nTotalTime; mlog_times.core_used_time += nUsedTime; - #if 0 printf("[nCoresUsed: %d] [MainCore: %d - Util: %5.2f %%]", nCoresUsed, nCoreUsedNum[0], nUsedPercent); if (nCoresUsed > 1) { @@ -1478,49 +2146,134 @@ int main(int argc, char *argv[]) x_counters[o_xu_id].rx_invalid_ext1_packets, x_counters[o_xu_id].Total_msgs_rcvd); + xran_print_error_stats(&x_counters[o_xu_id]); + if (x_counters[o_xu_id].rx_counter > old_rx_counter[o_xu_id]) old_rx_counter[o_xu_id] = x_counters[o_xu_id].rx_counter; if (x_counters[o_xu_id].tx_counter > old_tx_counter[o_xu_id]) old_tx_counter[o_xu_id] = x_counters[o_xu_id].tx_counter; - if(o_xu_id == 0){ - if(is_mlog_on == 0 && x_counters[o_xu_id].rx_counter > 0 && x_counters[o_xu_id].tx_counter > 0) { + // app_print_xran_antenna_stats(p_usecaseConfiguration->appMode,o_xu_id,&x_counters[o_xu_id]); + + if(o_xu_id == 0) + { + if(is_mlog_on == 0 && x_counters[o_xu_id].rx_counter > 0 && x_counters[o_xu_id].tx_counter > 0) + { xran_set_debug_stop(p_startupConfiguration[0]->debugStop, p_startupConfiguration[0]->debugStopCount); - MLogSetMask(0xFFFFFFFF); + MLogSetMask(0xFFFFFFFF); is_mlog_on = 1; } } } - } else { - printf("error xran_get_common_counters\n"); + else + printf("error xran_get_common_counters\n"); + } + + if(app_io_xran_fh_init.lbmEnable) + { + uint8_t vfId, link_status; + for(vfId = 0; vfId < app_io_xran_fh_init.io_cfg.num_vfs; ++vfId){ + xran_fetch_and_print_lbm_stats(1, &link_status, vfId); + } } - if (xran_curr_if_state == XRAN_STOPPED){ + // app_print_eth_stats((uint8_t)4); + + if(xran_curr_if_state == XRAN_STOPPED) + { break; } - if (NULL == fgets(input, 10, stdin)) { + if(NULL == fgets(input, 10, stdin)) + { continue; } const int sel_opt = atoi(input); - switch (sel_opt) { + switch (sel_opt) + { case 1: - xran_start(app_io_xran_handle); - printf("Start XRAN traffic\n"); +// xran_start(app_io_xran_handle); +// printf("Start XRAN traffic\n"); break; case 2: break; case 3: - xran_stop(app_io_xran_handle); + if(arg_params.manual_start == 0) + { + for(o_xu_id=0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + RuntimeConfig *p_o_xu_cfg = p_startupConfiguration[o_xu_id]; + int cc_id; + + for(cc_id=0; cc_id < p_o_xu_cfg->numCC; cc_id++) + { + printf("Deactivate RU%d CC%d!\n", o_xu_id, cc_id); + xran_deactivate_cc(o_xu_id, cc_id); + printf("Stop RU%d CC%d!\n", o_xu_id, cc_id); + xran_stop(app_io_xran_handle[o_xu_id]); + } + xran_close(app_io_xran_handle[o_xu_id]); + } + } printf("Stop XRAN traffic\n"); state = APP_STOPPED; break; + + // For Manual operation + case 5: // Open + if(arg_params.manual_start) + {} + break; + case 6: // Start + if(arg_params.manual_start) + {} + break; + case 7: // Activate CC + if(arg_params.manual_start) + { + printf("Activate CCs!\n"); + for(o_xu_id=0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + RuntimeConfig *p_o_xu_cfg = p_startupConfiguration[o_xu_id]; + int cc_id; + + for(cc_id=0; cc_id < p_o_xu_cfg->numCC; cc_id++) + xran_activate_cc(o_xu_id, cc_id); + } + } + break; + case 8: // Deactivate CC + if(arg_params.manual_start) + { + printf("Deactivate CCs!\n"); + for(o_xu_id=0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + { + RuntimeConfig *p_o_xu_cfg = p_startupConfiguration[o_xu_id]; + int cc_id; + + for(cc_id=0; cc_id < p_o_xu_cfg->numCC; cc_id++) + xran_deactivate_cc(o_xu_id, cc_id); + } + } + break; + case 9: // Stop + if(arg_params.manual_start) + {} + break; + case 0: // Close + if(arg_params.manual_start) + {} + break; + default: puts("Wrong option passed!"); break; } - if (APP_STOPPED == state) - break; + } + + if(xran_timingsource_get_threadstate() == XRAN_TMTHREAD_STAT_RUN) + { + xran_timingsource_stop(); } /** process all the O-RU|O-DU for use case */ @@ -1528,7 +2281,7 @@ int main(int argc, char *argv[]) app_io_xran_iq_content_get(o_xu_id, p_startupConfiguration[o_xu_id]); /* Check for owd results */ if (p_usecaseConfiguration->owdmEnable) - { + { FILE *file= NULL; uint64_t avgDelay =0; @@ -1538,40 +2291,45 @@ int main(int argc, char *argv[]) printf("can't open file %s\n",filename); exit (-1); } - if (xran_get_delay_measurements_results (app_io_xran_handle, (uint16_t) p_startupConfiguration[o_xu_id]->o_xu_id, p_usecaseConfiguration->appMode, &avgDelay)) - { + if (xran_get_delay_measurements_results (app_io_xran_handle[o_xu_id], (uint16_t) p_startupConfiguration[o_xu_id]->o_xu_id, p_usecaseConfiguration->appMode, &avgDelay)) + { fprintf(file,"OWD Measurements failed for port %d and appMode %d \n", p_startupConfiguration[o_xu_id]->o_xu_id,p_usecaseConfiguration->appMode); - } + } else - { + { fprintf(file,"OWD Measurements passed for port %d and appMode %d with AverageDelay %lu [ns]\n", p_startupConfiguration[o_xu_id]->o_xu_id,p_usecaseConfiguration->appMode, avgDelay); - } + } fflush(file); fclose(file); - } } + } MLogSetMask(0x0); - puts("Closing l1 app... Ending all threads..."); + puts("Closing sameple-app... Ending all threads..."); - xran_close(app_io_xran_handle); #ifdef FWK_ENABLED - if(p_startupConfiguration[0]->appMode == APP_O_DU && p_usecaseConfiguration->bbu_offload) { + if(p_usecaseConfiguration->bbu_offload) + { app_bbu_close(); - } + } #endif - app_io_xran_if_stop(); + + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + app_io_xran_if_stop(o_xu_id, p_startupConfiguration[o_xu_id]); puts("Dump IQs..."); - for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) { + for (o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) app_dump_o_xu_buffers(p_usecaseConfiguration, p_startupConfiguration[o_xu_id]); - } if(is_mlog_on) { app_profile_xran_print_mlog_stats(arg_params.usecase_file); rte_pause(); } - app_io_xran_if_free(); + for(o_xu_id = 0; o_xu_id < p_usecaseConfiguration->oXuNum; o_xu_id++) + app_io_xran_if_close(o_xu_id, p_startupConfiguration[o_xu_id]); + + xran_cleanup(); + return 0; } diff --git a/fhi_lib/app/src/xran_mlog_task_id.h b/fhi_lib/app/src/xran_mlog_task_id.h index 55dd187..d032160 100644 --- a/fhi_lib/app/src/xran_mlog_task_id.h +++ b/fhi_lib/app/src/xran_mlog_task_id.h @@ -60,380 +60,475 @@ extern "C" { #define PID_GNB_SYM_CB 72 #define PID_GNB_SRS_CB 74 #define PID_GNB_BFW_CB 75 +#define PID_GNB_CSIRS_CB 76 //#define NR5G_SUBTASK_PROFILING_ON //#define WLS_SUBTASK_ON //-------------------------------------------------------------------- // MAC2PHY API PROC //-------------------------------------------------------------------- -#define PID_MAC2PHY_API_HANDLER 1 -#define PID_MAC2PHY_API_HANDLER_NULL 2 -#define PID_MAC2PHY_API_CHECK_LATE_API 3 -#define PID_MAC2PHY_API_RECV 4 -#define PID_MAC2PHY_API_RECV_NULL 5 -#define PID_MAC2PHY_API_CLEANUP 6 -#define PID_MAC2PHY_API_ERROR_CHECK 7 -#define PID_MAC2PHY_API_PARSE 8 -#define PID_MAC2PHY_TX_SDU_PROC 9 -#define PID_MAC2PHY_TX_VECTOR_PROC_DATA 10 -#define PID_MAC2PHY_TX_SDU_ZBC 11 -#define PID_MAC2PHY_RX_VECTOR_PROC 12 -#define PID_MAC2PHY_API_PROC 13 +#define PID_MAC2PHY_API_HANDLER 1 +#define PID_MAC2PHY_API_HANDLER_NULL 2 +#define PID_MAC2PHY_API_CHECK_LATE_API 3 +#define PID_MAC2PHY_API_RECV 4 +#define PID_MAC2PHY_API_RECV_NULL 5 +#define PID_MAC2PHY_API_CLEANUP 6 +#define PID_MAC2PHY_API_ERROR_CHECK 7 +#define PID_MAC2PHY_API_PARSE 8 +#define PID_MAC2PHY_LTE_TX_SDU_PROC 9 +#define PID_MAC2PHY_LTE_TX_SDU_COPY 10 +#define PID_MAC2PHY_LTE_TX_HI_SDU_COPY 11 +#define PID_MAC2PHY_LTE_TX_VECTOR_PROC_DATA 12 +#define PID_MAC2PHY_LTE_TX_VECTOR_PROC_CONTROL 13 +#define PID_MAC2PHY_LTE_TX_SDU_ZBC 14 +#define PID_MAC2PHY_LTE_RX_VECTOR_PROC 15 +#define PID_MAC2PHY_LTE_API_PROC 16 +#define PID_MAC2PHY_NR5G_TX_CONFIG 17 +#define PID_MAC2PHY_NR5G_TX_REQUEST 18 +#define PID_MAC2PHY_NR5G_RX_CONFIG 19 +#define PID_MAC2PHY_API_PROC_NR5G 20 //-------------------------------------------------------------------- // PHY2MAC API PROC //-------------------------------------------------------------------- -#define PID_PHY2MAC_API_PROC_PUSCH 20 -#define PID_PHY2MAC_API_PROC_PUCCH 21 -#define PID_PHY2MAC_API_PROC_UPDATE 22 -#define PID_PHY2MAC_API_PROC_SEND 23 -#define PID_PHY2MAC_URLLC_API_PROC_SEND 24 +#define PID_PHY2MAC_LTE_API_PROC_UPDATE 30 +#define PID_PHY2MAC_LTE_API_PROC_SEND 31 +#define PID_PHY2MAC_NR5G_API_PROC_SEND_NR5G 32 +#define PID_PHY2MAC_NR5G_URLLC_API_PROC_SEND 33 //-------------------------------------------------------------------- -// PHYSTATS +// PHYDI //-------------------------------------------------------------------- -#define PID_PHYSTATS 30 +#define PID_PHYDI_IQ_COPY_DL 35 +#define PID_PHYDI_IQ_COPY_UL 36 +#define PID_PHYDI_IQ_COPY_PRACH_UL 37 +#define PID_PHYDI_IQ_COPY_SRS_UL 38 //-------------------------------------------------------------------- -// PHYDI +// PHYSTATS //-------------------------------------------------------------------- -#define PID_PHYDI_IQ_COPY_DL 35 -#define PID_PHYDI_IQ_COPY_UL 36 -#define PID_PHYDI_IQ_COPY_DL_FRB 37 -#define PID_PHYDI_IQ_COPY_UL_FRB 38 -#define PID_PHYDI_IQ_COPY_PRACH_UL 39 -#define PID_PHYDI_IQ_COPY_SRS_UL 40 +#define PID_PHYSTATS_LTE 40 +#define PID_PHYSTATS_NR5G 41 //-------------------------------------------------------------------- -// DISPATCH eBbuPool TASKS +// Infotrace tool Tasks //-------------------------------------------------------------------- -#define PID_GNB_TTI_START_GEN_EXECUTE 43 -#define PID_GNB_SYM2_WAKEUP_GEN_EXECUTE 44 -#define PID_GNB_SYM6_WAKEUP_GEN_EXECUTE 45 -#define PID_GNB_SYM11_WAKEUP_GEN_EXECUTE 46 -#define PID_GNB_SYM13_WAKEUP_GEN_EXECUTE 47 -#define PID_GNB_PRACH_WAKEUP_GEN_EXECUTE 48 -#define PID_GNB_SRS_WAKEUP_GEN_EXECUTE 49 +#define PID_INFO_TRACE_TRIGGER 45 +#define PID_INFO_TRACE_PARSE_DL 46 +#define PID_INFO_TRACE_PARSE_UL 47 //-------------------------------------------------------------------- // POLLING //-------------------------------------------------------------------- -#define PID_AUX_BBDEV_DL_POLL 50 -#define PID_AUX_BBDEV_DL_POLL_DISPATCH 51 -#define PID_AUX_BBDEV_UL_POLL 52 -#define PID_AUX_BBDEV_UL_POLL_DISPATCH 53 +#define PID_AUX_BBDEV_NR5G_DL_POLL 50 +#define PID_AUX_BBDEV_NR5G_DL_POLL_DISPATCH 51 +#define PID_AUX_BBDEV_NR5G_UL_POLL 52 +#define PID_AUX_BBDEV_NR5G_UL_POLL_DISPATCH 53 +#define PID_AUX_BBDEV_NR5G_UL_SRS_FFT_POLL 54 +#define PID_AUX_BBDEV_LTE_DL_POLL 55 +#define PID_AUX_BBDEV_LTE_DL_POLL_DISPATCH 56 +#define PID_AUX_BBDEV_LTE_UL_POLL 57 +#define PID_AUX_BBDEV_LTE_UL_POLL_DISPATCH 58 //-------------------------------------------------------------------- // WLS //-------------------------------------------------------------------- -#define PID_AUX_WLS_RX_PROCESS 55 -#define PID_AUX_WLS_SEND_API 56 -#define PID_AUX_WLS_ADD_TO_QUEUE 57 -#define PID_AUX_WLS_REMOVE_FROM_QUEUE 58 -#define PID_AUX_WLS_URLLC_RX_PROCESS 59 +#define PID_AUX_WLS_RX_PROCESS 60 +#define PID_AUX_WLS_SEND_API 61 +#define PID_AUX_WLS_ADD_TO_QUEUE 62 +#define PID_AUX_WLS_REMOVE_FROM_QUEUE 63 +#define PID_AUX_WLS_URLLC_RX_PROCESS 64 //-------------------------------------------------------------------- -// BBU-POOL-TASKS +// Timing Tasks //-------------------------------------------------------------------- -#define PID_BBUPOOL_TTI_COMPLETE 60 -#define PID_BBUPOOL_TTI_COMPLETE_PRINT 61 -#define PID_BBUPOOL_TTI_TO_TTI_DURATION 62 - -#define PID_BBUPOOL_ACTIVATE_CELL 63 -#define PID_BBUPOOL_DE_ACTIVATE_CELL 64 -#define PID_BBUPOOL_CREATE_EMPTY_LIST 65 -#define PID_BBUPOOL_RX_HANDLER 66 +#define PID_TIMING_TTI_COMPLETE 70 +#define PID_TIMING_TTI_COMPLETE_PRINT 71 +#define PID_TIMING_TTI_TO_TTI_DURATION 72 +#define PID_TIMING_RX_HANDLER 73 +#define PID_TIMING_TASKLIST_NOT_COMPLETED 74 +#define PID_TIMING_PROC 75 +#define PID_TIMING_PROC_TIMEOUT 76 +#define PID_TIMING_TTI_START 77 +#define PID_TIMING_SYM2_WAKEUP 78 +#define PID_TIMING_SYM6_WAKEUP 79 +#define PID_TIMING_SYM11_WAKEUP 80 +#define PID_TIMING_SYM13_WAKEUP 81 +#define PID_TIMING_PRACH_WAKEUP 82 +#define PID_TIMING_SRS_WAKEUP 83 + +//-------------------------------------------------------------------- +// 5GNR URLLC Tasks +//-------------------------------------------------------------------- +#define PID_NR5G_URLLC_API_TASK 91 +#define PID_NR5G_URLLC_DL_TASK 92 +#define PID_NR5G_URLLC_DL_TOTAL_TASK 93 +#define PID_NR5G_URLLC_UL_TASK 94 +#define PID_NR5G_URLLC_UL_TOTAL_TASK 95 +#define PID_NR5G_URLLC_TASK 96 +#define PID_NR5G_URLLC_DL_CALL_BACK 97 +#define PID_NR5G_URLLC_UL_CALL_BACK 98 +#define PID_NR5G_URLLC_API_CALL_BACK 99 + +//-------------------------------------------------------------------- +// 5GNR BBU Tasks (there is gap of 30 for 30 cell support) +//-------------------------------------------------------------------- +#define PCID_NR5G_UL_CFG_CC0 100 +#define PCID_NR5G_UL_PUSCH_CE_SYMB0_CC0 130 +#define PCID_NR5G_UL_PUSCH_CE_SYMB7_CC0 160 +#define PCID_NR5G_UL_PUSCH_MMSE_SYMB0_CC0 190 +#define PCID_NR5G_UL_PUSCH_MMSE_SYMB7_CC0 220 +#define PCID_NR5G_UL_PUSCH_REDEMAP_SYMB0_CC0 250 +#define PCID_NR5G_UL_PUSCH_REDEMAP_SYMB7_CC0 280 +#define PCID_NR5G_UL_PUSCH_LAYDEMAP_SYMB0_CC0 310 +#define PCID_NR5G_UL_PUSCH_LAYDEMAP_SYMB7_CC0 340 +#define PCID_NR5G_UL_PUSCH_PN_SYMB0_CC0 370 +#define PCID_NR5G_UL_PUSCH_PN_SYMB7_CC0 400 +#define PCID_NR5G_UL_PUSCH_DEMOD_SYMB0_CC0 430 +#define PCID_NR5G_UL_PUSCH_DEMOD_SYMB7_CC0 460 +#define PCID_NR5G_UL_PUSCH_DESCRAMBLE_CC0 490 +#define PCID_NR5G_UL_PUSCH_DECODER_CC0 520 +#define PCID_NR5G_UL_PUSCH_TB_CRC_CC0 550 +#define PCID_NR5G_UL_PUSCH_CB_SETUP_CC0 580 +#define PCID_NR5G_UL_PUSCH_TB_CC0 610 +#define PCID_NR5G_UL_PUSCH_UCI_DECODER_CC0 640 +#define PCID_NR5G_UL_PUCCH_RX_CC0 670 +#define PCID_NR5G_UL_PUSCH_DECODER_CB_CC0 700 +#define PCID_NR5G_UL_PUSCH_RX_SYMB0_CC0 730 +#define PCID_NR5G_UL_PUSCH_RX_SYMB7_CC0 760 +#define PCID_NR5G_UL_PRACH_PROCESS_CC0 790 +#define PCID_NR5G_UL_SRS_RX_CC0 820 +#define PCID_NR5G_UL_SRS_CE_CC0 850 +#define PCID_NR5G_UL_SRS_REPORT_CC0 880 +#define PCID_NR5G_UL_SRS_FFT_CB_SETUP_CC0 910 +#define PCID_NR5G_UL_SRS_FFT_CB_CC0 940 +#define PCID_NR5G_UL_SRS_CE_POST_CC0 970 +#define PCID_NR5G_UL_IQ_LOG_CC0 1000 +#define PCID_NR5G_UL_POST_CC0 1030 +#define PCID_NR5G_DL_CFG_CC0 1060 +#define PCID_NR5G_DL_PDSCH_TB_CRC_CC0 1090 +#define PCID_NR5G_DL_PDSCH_CB_SETUP_CC0 1120 +#define PCID_NR5G_DL_PDSCH_TB_QUEUE_CC0 1150 +#define PCID_NR5G_DL_PDSCH_TB_CC0 1180 +#define PCID_NR5G_DL_PDSCH_SCRAMBLER_CC0 1210 +#define PCID_NR5G_DL_PDSCH_MOD_CC0 1240 +#define PCID_NR5G_DL_PDSCH_PRECODE_CC0 1270 +#define PCID_NR5G_DL_PDSCH_RS_CC0 1300 +#define PCID_NR5G_DL_PDSCH_REMAP_CC0 1330 +#define PCID_NR5G_DL_SYMBOL_PROC_CC0 1360 +#define PCID_NR5G_DL_RESET_BUF_CC0 1390 +#define PCID_NR5G_DL_CSI_PROC_CC0 1420 +#define PCID_NR5G_DL_DCI_PROC_CC0 1450 +#define PCID_NR5G_DL_UCI_PROC_CC0 1480 +#define PCID_NR5G_DL_DCI_PRECODER_CC0 1510 +#define PCID_NR5G_DL_PBCH_PROC_CC0 1540 +#define PCID_NR5G_DL_POST_CC0 1570 +#define PCID_NR5G_DL_ORAN_CC0 1600 +#define PCID_NR5G_DL_PDSCH_BEAM_FORMING_CC0 1630 +#define PCID_NR5G_DL_BEAM_WEIGHT_TASK_CC0 1660 +#define PCID_NR5G_UL_BEAM_WEIGHT_TASK_CC0 1690 +#define PCID_NR5G_UL_PUCCH_BEAM_WEIGHT_TASK_CC0 1720 +#define PCID_FH_DL_IQ_COMPRESS_CC0 1750 +#define PCID_FH_UL_IQ_DECOMPRESS_CC0 1780 +#define PCID_FH_UL_SRS_IQ_DECOMPRESS_CC0 1810 +#define PCID_FH_UL_IQ_DECOMP_PUSCH_CC0 1840 +#define PCID_FH_UL_IQ_DECOMP_PUCCH_CC0 1870 +#define PCID_FH_DL_OFDM_CTRL_COMPRESS_CC0 1900 +#define PCID_FH_DL_OFDM_RS_COMPRESS_CC0 1930 +#define PCID_FH_DL_OFDM_DATA_COMPRESS_CC0 1960 +#define PCID_FH_RX_DATA_CC0 1990 +#define PCID_FH_RX_SRS_CC0 2020 +#define PCID_FH_RX_PRACH_CC0 2050 +#define PCID_FH_DL_BEAM_WEIGHT_COMPRESS_CC0 2080 +#define PCID_FH_UL_BEAM_WEIGHT_COMPRESS_CC0 2110 +#define PCID_FH_UL_PUCCH_BEAM_WEIGHT_COMPRESS_CC0 2140 +#define PCID_FH_UL_TX_CC0 2170 + + +//-------------------------------------------------------------------- +// LTE BBU Tasks (there is gap of 30 for 30 cell support) +//-------------------------------------------------------------------- +#define PCID_LTE_API_TASK_CC0 2300 +#define PCID_LTE_DL_FEC_CRC_CC0 2330 +#define PCID_LTE_UL_PREAPRE_TASK_CC0 2360 +#define PCID_LTE_UL_FEC_CC0 2390 +#define PCID_LTE_UL_PUSCH_CE_CC0 2420 +#define PCID_LTE_UL_DEMOD_CC0 2450 +#define PCID_LTE_ULFFT_TASK_CC0 2480 +#define PCID_LTE_DLIFFT_TASK_CC0 2510 +#define PCID_LTE_DLIFFT_POST_TASK_CC0 2540 +#define PCID_LTE_UL_FEC_PUSCH_TB_CRC_CHECK_CC0 2570 +#define PCID_LTE_DL_FEC_RM_TURBO_SCR_CC0 2600 +#define PCID_LTE_DL_MOD_CC0 2630 +#define PCID_LTE_UL_PUCCH_CC0 2660 +#define PCID_LTE_UL_SRS_CC0 2690 +#define PCID_LTE_UL_API_SEND_CC0 2720 +#define PCID_LTE_UL_PRACH_CC0 2750 +#define PCID_LTE_UL_POST_CC0 2780 +#define PCID_LTE_DL_OPT_TASK1_CC0 2810 +#define PCID_LTE_DL_OPT_TASK2_CC0 2840 +#define PCID_LTE_UL_OPT_TASK1_CC0 2870 +#define PCID_LTE_UL_OPT_TASK2_CC0 2900 + +//-------------------------------------------------------------------- +// DL, UL and SRS Links (there is gap of 30 for 30 cell support) +//-------------------------------------------------------------------- +#define PCID_DL_FEC_LINK_CC0 2930 +#define PCID_UL_FEC_LINK_CC0 2960 +#define PCID_DL_LINK_CC0 2990 +#define PCID_UL_LINK_CC0 2020 +#define PCID_UL_SRS_RX_LINK_CC0 3050 + +//-------------------------------------------------------------------- +// Latency Tasks (Need 5 values each (one per Numerology)) +//-------------------------------------------------------------------- +#define PID_DL_LINK_PRINT 3100 +#define PID_UL_LINK_PRINT 3105 +#define PID_SRS_LINK_PRINT 3110 //-------------------------------------------------------------------- -// Timing Tasks +// BBU-POOL-TASKS //-------------------------------------------------------------------- -#define PID_GNB_PROC_TIMING 70 -#define PID_GNB_PROC_TIMING_TIMEOUT 71 -#define PID_GNB_TTI_START 72 -#define PID_GNB_SYM2_WAKEUP 73 -#define PID_GNB_SYM6_WAKEUP 74 -#define PID_GNB_SYM11_WAKEUP 75 -#define PID_GNB_SYM13_WAKEUP 76 -#define PID_GNB_PRACH_WAKEUP 77 -#define PID_GNB_SRS_WAKEUP 78 - -//-------------------------------------------------------------------- -// URLLC Tasks -//-------------------------------------------------------------------- -#define PID_GNB_URLLC_DL_TASK 80 -#define PID_GNB_URLLC_DL_TOTAL_TASK 81 -#define PID_GNB_URLLC_UL_TASK 82 -#define PID_GNB_URLLC_UL_TOTAL_TASK 83 -#define PID_GNB_URLLC_TASK 84 -#define PID_GNB_URLLC_DL_CALL_BACK 85 -#define PID_GNB_URLLC_UL_CALL_BACK 86 -#define PID_GNB_URLLC_API_CALL_BACK 87 - -//-------------------------------------------------------------------- -// Latency Tasks (Need 4 values (one per Numerology)) -//-------------------------------------------------------------------- -#define PID_GNB_DL_LINK_PRINT 88 -#define PID_GNB_UL_LINK_PRINT 92 -#define PID_GNB_SRS_LINK_PRINT 96 - -//-------------------------------------------------------------------- -// GNB UL BBU Tasks (there is gap of 24 for 24 cell support) -//-------------------------------------------------------------------- -#define PCID_GNB_FH_RX_DATA_CC0 100 -#define PCID_GNB_FH_RX_SRS_CC0 124 -#define PCID_GNB_PUSCH_CE_SYMB0_CC0 148 -#define PCID_GNB_PUSCH_MMSE_SYMB0_CC0 172 -#define PCID_GNB_PUSCH_MMSE_SYMB7_CC0 196 -#define PCID_GNB_PUSCH_REDEMAP_SYMB0_CC0 220 -#define PCID_GNB_PUSCH_REDEMAP_SYMB7_CC0 244 -#define PCID_GNB_PUSCH_LAYDEMAP_SYMB0_CC0 268 -#define PCID_GNB_PUSCH_LAYDEMAP_SYMB7_CC0 292 -#define PCID_GNB_PUSCH_PN_SYMB0_CC0 316 -#define PCID_GNB_PUSCH_PN_SYMB7_CC0 340 -#define PCID_GNB_PUSCH_DEMOD_SYMB0_CC0 364 -#define PCID_GNB_PUSCH_DEMOD_SYMB7_CC0 388 -#define PCID_GNB_PUSCH_DESCRAMBLE_CC0 412 -#define PCID_GNB_PUSCH_DECODER_CC0 436 -#define PCID_GNB_PUSCH_TB_CC0 460 -#define PCID_GNB_UL_CFG_CC0 484 -#define PCID_GNB_PUSCH_DECODER_CB_CC0 508 -#define PCID_GNB_PUSCH_RX_SYMB0_CC0 532 -#define PCID_GNB_PUSCH_RX_SYMB7_CC0 556 -#define PCID_GNB_PRACH_PROCESS_CC0 580 -#define PCID_GNB_PUCCH_RX_CC0 604 -#define PCID_GNB_SRS_RX_CC0 628 -#define PCID_GNB_PUSCH_UCI_DECODER_CC0 652 -#define PCID_GNB_UL_POST_CC0 676 -#define PCID_GNB_UL_IQ_LOG_CC0 700 -#define PCID_GNB_FH_RX_PRACH_CC0 724 -#define PCID_GNB_PUSCH_RX_LINK_CC0 748 -#define PCID_GNB_UL_LINK_CC0 772 -#define PCID_GNB_PUSCH_CE_SYMB7_CC0 796 -#define PCID_GNB_SRS_RX_LINK_CC0 820 - - -#define PID_GNB_TASKLIST_NOT_COMPLETED 899 -//-------------------------------------------------------------------- -// GNB DL BBU Tasks (there is gap of 24 for 24 cell support) -//-------------------------------------------------------------------- -#define PCID_GNB_DL_CFG_CC0 900 -#define PCID_GNB_PDSCH_TB_CC0 924 -#define PCID_GNB_PDSCH_SCRAMBLER_CC0 948 -#define PCID_GNB_PDSCH_MOD_CC0 972 -#define PCID_GNB_PDSCH_PRECODE_CC0 996 -#define PCID_GNB_PDSCH_RS_CC0 1020 -#define PCID_GNB_PDSCH_REMAP_CC0 1044 -#define PCID_GNB_DL_RESET_BUF_CC0 1068 -#define PCID_GNB_DL_SYMBOL_PROC_CC0 1092 -#define PCID_GNB_DL_CSI_PROC_CC0 1116 -#define PCID_GNB_DL_DCI_PROC_CC0 1140 -#define PCID_GNB_DL_UCI_PROC_CC0 1164 -#define PCID_GNB_DL_PBCH_PROC_CC0 1188 -#define PCID_GNB_DL_POST_CC0 1212 -#define PCID_GNB_PDSCH_TB_QUEUE_CC0 1236 -#define PCID_GNB_DL_LINK_CC0 1260 -#define PCID_GNB_DL_DCI_PRECODER_CC0 1284 -#define PCID_GNB_PDSCH_TB_CRC_CC0 1308 -#define PCID_GNB_PDSCH_CB_SETUP_CC0 1332 - -//-------------------------------------------------------------------- -// Other DL / UL tasks (there is gap of 24 for 24 cell support) -//-------------------------------------------------------------------- -#define PCID_GNB_PUSCH_TB_CRC_CC0 1500 -#define PCID_GNB_PUSCH_CB_SETUP_CC0 1524 -#define PCID_GNB_DL_BEAM_WEIGHT_TASK_CC0 1548 -#define PCID_GNB_UL_BEAM_WEIGHT_TASK_CC0 1572 -#define PCID_GNB_SRS_CE_CC0 1596 -#define PCID_GNB_SRS_REPORT_CC0 1620 -#define PCID_GNB_DL_BEAM_WEIGHT_COMPRESS_CC0 1644 -#define PCID_GNB_UL_BEAM_WEIGHT_COMPRESS_CC0 1668 -#define PCID_GNB_DL_IQ_COMPRESS_CC0 1692 -#define PCID_GNB_UL_IQ_DECOMPRESS_CC0 1712 -#define PCID_GNB_UL_IQ_FROM_XRAN_CC0 1736 -#define PCID_GNB_UL_IQ_SP_SLOT_FROM_XRAN_CC0 1760 -#define PCID_GNB_UL_SRS_IQ_DECOMPRESS_CC0 1784 -#define PCID_GNB_DL_OFDM_CTRL_COMPRESS_CC0 1808 -#define PCID_GNB_DL_OFDM_RS_COMPRESS_CC0 1832 -#define PCID_GNB_DL_OFDM_DATA_COMPRESS_CC0 1856 - -//-------------------------------------------------------------------- -// GNB UL Sub Tasks -//-------------------------------------------------------------------- -#define PID_GNB_PUCCH_F0_SEQ_GEN 2000 -#define PID_GNB_PUCCH_F0_DETECT 2001 -#define PID_GNB_PUCCH_F1_SEQ_GEN1 2002 -#define PID_GNB_PUCCH_F1_SEQ_GEN2 2003 -#define PID_GNB_PUCCH_F1_DESPRD 2004 -#define PID_GNB_PUCCH_F1_DEMOD 2005 -#define PID_GNB_PUCCH_F2_DMRS_GEN 2006 -#define PID_GNB_PUCCH_F2_CE 2007 -#define PID_GNB_PUCCH_F2_EQU 2008 -#define PID_GNB_PUCCH_F2_DEMOD 2009 -#define PID_GNB_PUCCH_F2_DESCR 2010 -#define PID_GNB_PUCCH_F2_DEC 2011 -#define PID_GNB_PUCCH_F3_F4_DMRS_GEN 2012 -#define PID_GNB_PUCCH_F3_F4_CE 2013 -#define PID_GNB_PUCCH_F3_F4_EQU 2014 -#define PID_GNB_PUCCH_F3_F4_IDFT 2015 -#define PID_GNB_PUCCH_F3_F4_DESPRD 2016 -#define PID_GNB_PUCCH_F3_F4_DEMOD 2017 -#define PID_GNB_PUCCH_F3_F4_DESCR 2018 -#define PID_GNB_PUCCH_F3_F4_DEC 2019 - -//-------------------------------------------------------------------- -// GNB UL BBU Creation Tasks -//-------------------------------------------------------------------- -#define PID_GNB_PUSCH_DMRS0_GEN_BYPASS 2700 -#define PID_GNB_PUSCH_DMRS0_GEN_EXECUTE 2701 -#define PID_GNB_PUSCH_DMRS1_GEN_BYPASS 2702 -#define PID_GNB_PUSCH_DMRS1_GEN_EXECUTE 2703 -#define PID_GNB_PRACH_GEN_BYPASS 2704 -#define PID_GNB_PRACH_GEN_EXECUTE 2705 -#define PID_GNB_PUCCH_GEN_BYPASS 2706 -#define PID_GNB_PUCCH_GEN_EXECUTE 2707 -#define PID_GNB_SRS_GEN_BYPASS 2708 -#define PID_GNB_SRS_GEN_EXECUTE 2709 -#define PID_GNB_UL_CFG_GEN_BYPASS 2710 -#define PID_GNB_UL_CFG_GEN_EXECUTE 2711 -#define PID_GNB_PUSCH_TB_TASK_GEN_BYPASS 2712 -#define PID_GNB_PUSCH_TB_TASK_GEN_EXECUTE 2713 -#define PID_GNB_PUSCH_DECODE_TASK_GEN_BYPASS 2714 -#define PID_GNB_PUSCH_DECODE_TASK_GEN_EXECUTE 2715 -#define PID_GNB_PUSCH_DATA0_GEN_BYPASS 2716 -#define PID_GNB_PUSCH_DATA0_GEN_EXECUTE 2717 -#define PID_GNB_PUSCH_DATA1_GEN_BYPASS 2718 -#define PID_GNB_PUSCH_DATA1_GEN_EXECUTE 2719 - -//-------------------------------------------------------------------- -// GNB DL BBU Creation Tasks -//-------------------------------------------------------------------- -#define PID_GNB_DL_SCRAMBLER_GEN_BYPASS 2720 -#define PID_GNB_DL_SCRAMBLER_GEN_EXECUTE 2721 -#define PID_GNB_DL_CONFIG_GEN_BYPASS 2722 -#define PID_GNB_DL_CONFIG_GEN_EXECUTE 2723 -#define PID_GNB_DL_BEAM_GEN_BYPASS 2724 -#define PID_GNB_DL_BEAM_GEN_EXECUTE 2725 - -//-------------------------------------------------------------------- -// GNB Pre Tasks -//-------------------------------------------------------------------- -#define PID_GNB_DL_PDSCH_SYMBOL_PRE_TASK 2730 -#define PID_GNB_UL_PUSCH_CE0_PRE_TASK 2731 -#define PID_GNB_UL_PUSCH_CE7_PRE_TASK 2732 -#define PID_GNB_UL_PUSCH_MMSE0_PRE_TASK 2733 -#define PID_GNB_UL_PUSCH_MMSE7_PRE_TASK 2734 -#define PID_GNB_UL_PUCCH_PRE_TASK 2735 -#define PID_GNB_UL_SRS_PRE_TASK 2736 -#define PID_GNB_UL_PUSCH_LLR_RX_PRE_TASK 2737 -#define PID_GNB_DL_BEAM_WEIGHT_PRE_TASK 2738 -#define PID_GNB_UL_BEAM_WEIGHT_PRE_TASK 2739 -#define PID_GNB_UL_PUSCH_DECODE_PRE_TASK 2740 - -//-------------------------------------------------------------------- -// GNB Post Tasks -//-------------------------------------------------------------------- -#define PID_GNB_UL_PUCCH_POST_TASK 2745 - -//-------------------------------------------------------------------- -// Other tasks -//-------------------------------------------------------------------- -#define PID_GNB_DL_IFFT0 2750 -#define PID_GNB_DL_IFFT1 2751 -#define PID_GNB_DL_IFFT2 2752 -#define PID_GNB_DL_IFFT3 2753 -#define PID_GNB_DL_IFFT4 2754 -#define PID_GNB_DL_IFFT5 2755 -#define PID_GNB_DL_IFFT6 2756 -#define PID_GNB_DL_IFFT7 2757 -#define PID_GNB_UL_FFT0 2758 -#define PID_GNB_UL_FFT1 2759 -#define PID_GNB_UL_FFT2 2760 -#define PID_GNB_UL_FFT3 2761 -#define PID_GNB_UL_FFT4 2762 -#define PID_GNB_UL_FFT5 2763 -#define PID_GNB_UL_FFT6 2764 -#define PID_GNB_UL_FFT7 2765 - -#define PID_DLIFFT 2766 -#define PID_DLIFFT_ADD_CP 2767 -#define PID_ULFFT 2768 - -//-------------------------------------------------------------------- -// AUX RADIO -//-------------------------------------------------------------------- -#define PID_AUX_RADIO_RX_BYPASS_PROC 2900 -#define PID_AUX_RADIO_RX_STOP 2901 -#define PID_AUX_RADIO_RX_UL_IQ 2902 -#define PID_AUX_RADIO_PRACH_PKT 2903 -#define PID_AUX_RADIO_FE_COMPRESS 2904 -#define PID_AUX_RADIO_FE_DECOMPRESS 2905 -#define PID_AUX_RADIO_TX_BYPASS_PROC 2906 -#define PID_AUX_RADIO_ETH_TX_BURST 2907 -#define PID_AUX_RADIO_TX_DL_IQ 2908 -#define PID_AUX_RADIO_RX_VALIDATE 2909 -#define PID_AUX_RADIO_RX_IRQ_ON 2910 -#define PID_AUX_RADIO_RX_IRQ_OFF 2911 -#define PID_AUX_RADIO_RX_EPOLL_WAIT 2912 -#define PID_AUX_RADIO_TX_LTEMODE_PROC 2913 -#define PID_AUX_RADIO_RX_LTEMODE_PROC 2914 -#define PID_AUX_RADIO_TX_PLAY_BACK_IQ 2915 - -#define PCID_BBUPOOL_RADIO_DL_COMPRESSION_TASK_CC0 2940 -#define PCID_BBUPOOL_RADIO_DL_IQ_LOG_LTE_TASK_CC0 2960 -#define PCID_BBUPOOL_RADIO_UL_IQ_LOG_LTE_TASK_CC0 2980 +#define PID_BBUPOOL_PRE_LTE_DLIFFT 3220 +#define PID_BBUPOOL_PRE_LTE_DLTURSCR 3221 +#define PID_BBUPOOL_PRE_LTE_ULFEC 3222 +#define PID_BBUPOOL_PRE_NR5G_DL_PDSCH_SYMBOL 3223 +#define PID_BBUPOOL_PRE_NR5G_DL_BEAM_WGHT 3224 +#define PID_BBUPOOL_PRE_NR5G_UL_BEAM_WGHT 3225 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_CE0 3226 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_CE7 3227 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_MMSE0 3228 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_MMSE7 3229 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_LLR_DEMAP 3230 +#define PID_BBUPOOL_PRE_NR5G_UL_PUSCH_DECODE 3231 +#define PID_BBUPOOL_PRE_NR5G_UL_PUCCH 3232 +#define PID_BBUPOOL_PRE_NR5G_UL_PUCCH_BEAM_WGHT 3233 +#define PID_BBUPOOL_PRE_NR5G_UL_SRS 3234 + +#define PID_BBUPOOL_POST_NR5G_UL_PUCCH 3235 + +#define PID_BBUPOOL_GEN_DL_CONFIG 3236 +#define PID_BBUPOOL_GEN_DL_SCRAMBLER 3237 +#define PID_BBUPOOL_GEN_UL_CONFIG 3238 +#define PID_BBUPOOL_GEN_SRS_FFT 3239 +#define PID_BBUPOOL_GEN_PUSCH_CE0 3240 +#define PID_BBUPOOL_GEN_PUSCH_CE7 3241 +#define PID_BBUPOOL_GEN_PRACH 3242 +#define PID_BBUPOOL_GEN_PUCCH 3243 +#define PID_BBUPOOL_GEN_SRS 3244 +#define PID_BBUPOOL_GEN_UL_PUSCH_TB 3245 +#define PID_BBUPOOL_GEN_UL_PUSCH_DECODE 3246 +#define PID_BBUPOOL_GEN_UL_PUSCH_MMSE0 3247 +#define PID_BBUPOOL_GEN_UL_PUSCH_MMSE7 3248 +#define PID_BBUPOOL_GEN_DL_BEAM_WGHT 3249 +#define PID_BBUPOOL_GEN_TIMING_TTI_START 3250 +#define PID_BBUPOOL_GEN_TIMING_SYM2 3251 +#define PID_BBUPOOL_GEN_TIMING_SYM6 3252 +#define PID_BBUPOOL_GEN_TIMING_SYM11 3253 +#define PID_BBUPOOL_GEN_TIMING_SYM13 3254 +#define PID_BBUPOOL_GEN_TIMING_PRACH 3255 +#define PID_BBUPOOL_GEN_TIMING_SRS 3256 + +#define PID_BBUPOOL_BYPASS_UL_PUSCH_TB 3257 +#define PID_BBUPOOL_BYPASS_DL_SCRAMBLER 3258 //-------------------------------------------------------------------- // XRAN //-------------------------------------------------------------------- -#define PID_XRAN_TTI_TIMER 3100 -#define PID_XRAN_TTI_CB 3101 -#define PID_XRAN_SYM_TIMER 3102 -#define PID_XRAN_PROC_TIMING_TIMEOUT 3103 -#define PID_XRAN_TIME_SYSTIME_POLL 3104 -#define PID_XRAN_TIME_SYSTIME_STOP 3105 -#define PID_XRAN_TIME_ARM_TIMER 3106 - -#define PID_XRAN_FREQ_RX_PKT 3107 -#define PID_XRAN_RX_STOP 3108 -#define PID_XRAN_RX_UL_IQ 3109 -#define PID_XRAN_PRACH_PKT 3110 -#define PID_XRAN_FE_COMPRESS 3111 -#define PID_XRAN_FE_DECOMPRESS 3112 -#define PID_XRAN_TX_BYPASS_PROC 3113 -#define PID_XRAN_ETH_TX_BURST 3114 -#define PID_XRAN_TX_DL_IQ 3115 -#define PID_XRAN_RX_VALIDATE 3116 -#define PID_XRAN_RX_IRQ_ON 3117 -#define PID_XRAN_RX_IRQ_OFF 3118 -#define PID_XRAN_RX_EPOLL_WAIT 3119 -#define PID_XRAN_TX_LTEMODE_PROC 3120 -#define PID_XRAN_RX_LTEMODE_PROC 3121 -#define PID_XRAN_TX_PLAY_BACK_IQ 3122 -#define PID_XRAN_PROCESS_TX_SYM 3123 -#define PID_XRAN_DISPATCH_TX_SYM 3124 -#define PID_XRAN_PREPARE_TX_PKT 3125 -#define PID_XRAN_ATTACH_EXT_BUF 3126 -#define PID_XRAN_ETH_ENQUEUE_BURST 3127 - -#define PID_XRAN_CP_DL_CB 3128 -#define PID_XRAN_CP_UL_CB 3129 -#define PID_XRAN_UP_DL_CB 3130 -#define PID_XRAN_SYM_OTA_CB 3131 -#define PID_XRAN_TTI_CB_TO_PHY 3132 -#define PID_XRAN_HALF_SLOT_CB_TO_PHY 3133 -#define PID_XRAN_FULL_SLOT_CB_TO_PHY 3134 -#define PID_XRAN_UP_UL_HALF_DEAD_LINE_CB 3135 -#define PID_XRAN_UP_UL_FULL_DEAD_LINE_CB 3136 -#define PID_XRAN_UP_UL_USER_DEAD_LINE_CB 3137 - -#define PID_XRAN_PROCESS_UP_PKT 3140 -#define PID_XRAN_PROCESS_UP_PKT_SRS 3141 -#define PID_XRAN_PROCESS_UP_PKT_PARSE 3142 -#define PID_XRAN_PROCESS_CP_PKT 3143 -#define PID_XRAN_PROCESS_DELAY_MEAS_PKT 3144 - -#define PID_XRAN_TIME_ARM_TIMER_DEADLINE 3150 -#define PID_XRAN_TIME_ARM_USER_TIMER_DEADLINE 3151 +#define PID_XRAN_TTI_TIMER 3300 +#define PID_XRAN_TTI_CB 3301 +#define PID_XRAN_SYM_TIMER 3302 +#define PID_XRAN_PROC_TIMING_TIMEOUT 3303 +#define PID_XRAN_TIME_SYSTIME_POLL 3304 +#define PID_XRAN_TIME_SYSTIME_STOP 3305 +#define PID_XRAN_TIME_ARM_TIMER 3306 +#define PID_XRAN_FREQ_RX_PKT 3307 +#define PID_XRAN_RX_STOP 3308 +#define PID_XRAN_RX_UL_IQ 3309 +#define PID_XRAN_PRACH_PKT 3310 +#define PID_XRAN_FE_COMPRESS 3311 +#define PID_XRAN_FE_DECOMPRESS 3312 +#define PID_XRAN_TX_BYPASS_PROC 3313 +#define PID_XRAN_ETH_TX_BURST 3314 +#define PID_XRAN_TX_DL_IQ 3315 +#define PID_XRAN_RX_VALIDATE 3316 +#define PID_XRAN_RX_IRQ_ON 3317 +#define PID_XRAN_RX_IRQ_OFF 3318 +#define PID_XRAN_RX_EPOLL_WAIT 3319 +#define PID_XRAN_TX_LTEMODE_PROC 3320 +#define PID_XRAN_RX_LTEMODE_PROC 3321 +#define PID_XRAN_TX_PLAY_BACK_IQ 3322 +#define PID_XRAN_PROCESS_TX_SYM 3323 +#define PID_XRAN_DISPATCH_TX_SYM 3324 +#define PID_XRAN_PREPARE_TX_PKT 3325 +#define PID_XRAN_ATTACH_EXT_BUF 3326 +#define PID_XRAN_ETH_ENQUEUE_BURST 3327 +#define PID_XRAN_CP_DL_CB 3328 +#define PID_XRAN_CP_UL_CB 3329 +#define PID_XRAN_UP_DL_CB 3330 +#define PID_XRAN_SYM_OTA_CB 3331 +#define PID_XRAN_TTI_CB_TO_PHY 3332 +#define PID_XRAN_HALF_SLOT_CB_TO_PHY 3333 +#define PID_XRAN_FULL_SLOT_CB_TO_PHY 3334 +#define PID_XRAN_UP_UL_HALF_DEAD_LINE_CB 3335 +#define PID_XRAN_UP_UL_FULL_DEAD_LINE_CB 3336 +#define PID_XRAN_UP_UL_USER_DEAD_LINE_CB 3337 +#define PID_XRAN_PROCESS_UP_PKT 3338 +#define PID_XRAN_PROCESS_UP_PKT_SRS 3339 +#define PID_XRAN_PROCESS_UP_PKT_PARSE 3340 +#define PID_XRAN_PROCESS_CP_PKT 3341 +#define PID_XRAN_PROCESS_DELAY_MEAS_PKT 3342 +#define PID_XRAN_TIME_ARM_TIMER_DEADLINE 3343 +#define PID_XRAN_TIME_ARM_USER_TIMER_DEADLINE 3344 +#define PID_XRAN_UL_DECOMPRESS 3345 +#define PID_XRAN_DL_DECOMPRESS 3346 +#define PID_XRAN_SRS_DECOMPRESS 3347 +#define PID_XRAN_PRACH_DECOMPRESS 3348 +#define PID_XRAN_CSIRS_DECOMPRESS 3349 + + +//-------------------------------------------------------------------- +// LTE SUBTASKS +//-------------------------------------------------------------------- +#define PID_SUBLTE_DL_FEC_CRC 3350 +#define PID_SUBLTE_DL_FEC_TURBOENCODER_RMATCHING 3351 +#define PID_SUBLTE_DL_FEC_SCRAMBLER 3352 +#define PID_SUBLTE_DL_FEC_CRCA 3353 +#define PID_SUBLTE_DL_FEC_CRCB 3354 +#define PID_SUBLTE_DL_FEC_TURBOENCODERSDK 3355 +#define PID_SUBLTE_DL_FEC_RATEMATCHINGSDK 3356 +#define PID_SUBLTE_DL_MOD_CONTROL_SYM 3357 +#define PID_SUBLTE_DL_MOD_DATA_SYM 3358 +#define PID_SUBLTE_DL_MOD_RES_ELEM_MAPPER 3359 +#define PID_SUBLTE_DL_MOD_SETUP_SYM_BUFS 3360 +#define PID_SUBLTE_DL_MOD_DLIFFT_SETUP 3361 +#define PID_SUBLTE_DL_MOD_MAPPER 3362 +#define PID_SUBLTE_DL_MOD_LAYER_MAPPER_PRECODER 3363 +#define PID_SUBLTE_DL_MOD_PILOTS 3364 +#define PID_SUBLTE_DL_MOD_PILOTS_POS 3365 +#define PID_SUBLTE_DL_MOD_SYNC_SIGNALS 3366 +#define PID_SUBLTE_DL_MOD_PILOTS_UE_S 3367 +#define PID_SUBLTE_DL_MOD_MEMSET 3368 +#define PID_SUBLTE_DL_MOD_PILOTS_CSI 3369 +#define PID_SUBLTE_DL_MOD_PRECODER 3370 +#define PID_SUBLTE_DL_MOD_SETUP_SYM_BUFS_MPDCCH 3371 +#define PID_SUBLTE_DL_MOD_MAPPER_MPDCCH 3372 +#define PID_SUBLTE_DL_MOD_LMAPPER_PRECODER_MPDCCH 3373 +#define PID_SUBLTE_DL_IQ_SETUP 3374 +#define PID_SUBLTE_DL_SDU_SETUP 3375 +#define PID_SUBLTE_DL_PDSCH_FEC_ENQUEUE 3376 +#define PID_SUBLTE_DL_PDSCH_POST_FEC 3377 +#define PID_SUBLTE_DL_MODULATION_MAPPER 3378 +#define PID_SUBLTE_UL_DEMOD_PROC 3379 +#define PID_SUBLTE_UL_DEMOD_PUSCH_CHEST_PART0 3380 +#define PID_SUBLTE_UL_DEMOD_PUSCH_CHEST_PART1 3381 +#define PID_SUBLTE_UL_DEMOD_PUSCH_CHEST_PART2 3382 +#define PID_SUBLTE_UL_DEMOD_PUSCH_RSSI 3383 +#define PID_SUBLTE_UL_DEMOD_PUSCH_SNR 3384 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MRC 3385 +#define PID_SUBLTE_UL_DEMOD_PUSCH_INVDFT_DEMAPPER 3386 +#define PID_SUBLTE_UL_DEMOD_MULTIPLEX_PUSCH 3387 +#define PID_SUBLTE_UL_DEMOD_FLOAT_TO_FIX 3388 +#define PID_SUBLTE_UL_DEMOD_PUSCH_INVDFT 3389 +#define PID_SUBLTE_UL_DEMOD_PUSCH_DEMAPPER 3390 +#define PID_SUBLTE_UL_DEMOD_PUSCH_PRE_INVDFT_SCALE 3391 +#define PID_SUBLTE_UL_DEMOD_PUSCH_POST_INVDFT_SCALE 3392 +#define PID_SUBLTE_UL_DEMOD_PUSCH_SIG_LEVEL 3393 +#define PID_SUBLTE_UL_DEMOD_PUSCH_NOISE_DEMOD 3394 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MRC_MU_MIMO 3395 +#define PID_SUBLTE_UL_DEMOD_PUSCH_SNR_MU_MIMO 3396 +#define PID_SUBLTE_UL_DEMOD_PUSCH_CEST_MUMIMO_PRT0 3397 +#define PID_SUBLTE_UL_DEMOD_MU_MIMO_MATRIX_INVERSE 3398 +#define PID_SUBLTE_UL_DEMAP_PROC 3399 +#define PID_SUBLTE_UL_DEMOD_PUSCH_NOISE_EST_MU_MIMO 3400 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MU_MIMO_RSSI 3401 +#define PID_SUBLTE_UL_DEMOD_PUSCH_SETUP 3402 +#define PID_SUBLTE_UL_DEMOD_PUSCH_USR 3403 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MU_MIMO_USR 3404 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MUMIMO_NOISE_POW 3405 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MU_MIMO_MATRIX 3406 +#define PID_SUBLTE_UL_DEMOD_PUSCH_MU_MIMO_CALC_G 3407 +#define PID_SUBLTE_UL_DEMOD_PUCCH_CHAN 3408 +#define PID_SUBLTE_UL_DEMOD_PUCCH_CHAN_EST 3409 +#define PID_SUBLTE_UL_DEMOD_PUCCH 3410 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC 3411 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC_1 3412 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC_2 3413 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC_3 3414 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC_4 3415 +#define PID_SUBLTE_UL_PRACH_PEAK_SEARCH_PROC_5 3416 +#define PID_SUBLTE_UL_PRACH_INIT 3417 +#define PID_SUBLTE_UL_PRACH_DWN_SAMPLING 3418 +#define PID_SUBLTE_UL_PRACH_FFT 3419 +#define PID_SUBLTE_UL_PRACH_COPY_CORR 3420 +#define PID_SUBLTE_UL_PRACH_DEMOD 3421 +#define PID_SUBLTE_UL_PRACH_DWN_STAGE1 3422 +#define PID_SUBLTE_UL_PRACH_DWN_STAGE2 3423 +#define PID_SUBLTE_UL_PRACH_DWN_STAGE3 3424 +#define PID_SUBLTE_UL_DEMOD_SRS 3425 +#define PID_SUBLTE_UL_DEMOD_SRS_CHAN_EST 3426 +#define PID_SUBLTE_UL_DEMOD_SRS_BEAMFORMING_DOA_EST 3427 +#define PID_SUBLTE_UL_DEMOD_SRS_SNR 3428 +#define PID_SUBLTE_UL_MSRM_RIP_UNUSED_RB 3429 +#define PID_SUBLTE_UL_MSRM_RIP_PUSCH 3430 +#define PID_SUBLTE_UL_MSRM_RIP_PUCCH 3431 +#define PID_SUBLTE_UL_FEC_PUSCH_DESCRAMBLER 3432 +#define PID_SUBLTE_UL_FEC_PUSCH_DEINTERL 3433 +#define PID_SUBLTE_UL_FEC_PUSCH_COPY 3434 +#define PID_SUBLTE_UL_FEC_PUSCH_CODE_BLOCK 3435 +#define PID_SUBLTE_UL_FEC_PUSCH_PREP 3436 +#define PID_SUBLTE_UL_FEC_PUSCH_HARQ_COMB 3437 +#define PID_SUBLTE_UL_FEC_PUSCH_RATE_DEMATCHING 3438 +#define PID_SUBLTE_UL_FEC_PUSCH_TB_CRC_CHECK 3439 +#define PID_SUBLTE_UL_FEC_PUSCH_FEC_DECODER 3440 +#define PID_SUBLTE_UL_FEC_PUSCH_VITERBI_DECODER 3441 +#define PID_SUBLTE_UL_FEC_RM_DECODER 3442 +#define PID_SUBLTE_UL_FEC_RM_FHT_DECODER 3443 +#define PID_SUBLTE_UL_FEC_RM_DECODER_CONF 3444 +#define PID_SUBLTE_UL_FEC_CQI_EXTRACTION 3445 +#define PID_SUBLTE_UL_IQ_SETUP 3446 +#define PID_SUBLTE_UL_PUSCH_PROC 3447 +#define PID_SUBLTE_UL_PUSCH_ENQUEUE 3448 +#define PID_SUBLTE_UL_PUCCH_PROC 3449 +#define PID_SUBLTE_UL_PRACH_PROC 3450 +#define PID_SUBLTE_UL_SRS_PROC 3451 +#define PID_SUBLTE_UL_PUSCH_POST_FEC 3452 +#define PID_SUBLTE_UL_SEND_API 3453 + +//-------------------------------------------------------------------- +// 5GNR SUBTASKS +//-------------------------------------------------------------------- +#define PID_SUBNR5G_PUCCH_F0_SEQ_GEN 3475 +#define PID_SUBNR5G_PUCCH_F0_DETECT 3476 +#define PID_SUBNR5G_PUCCH_F1_SEQ_GEN1 3477 +#define PID_SUBNR5G_PUCCH_F1_SEQ_GEN2 3478 +#define PID_SUBNR5G_PUCCH_F1_DESPRD 3479 +#define PID_SUBNR5G_PUCCH_F1_DEMOD 3480 +#define PID_SUBNR5G_PUCCH_F2_DMRS_GEN 3481 +#define PID_SUBNR5G_PUCCH_F2_CE 3482 +#define PID_SUBNR5G_PUCCH_F2_EQU 3483 +#define PID_SUBNR5G_PUCCH_F2_DEMOD 3484 +#define PID_SUBNR5G_PUCCH_F2_DESCR 3485 +#define PID_SUBNR5G_PUCCH_F2_DEC 3486 +#define PID_SUBNR5G_PUCCH_F3_F4_DMRS_GEN 3487 +#define PID_SUBNR5G_PUCCH_F3_F4_CE 3488 +#define PID_SUBNR5G_PUCCH_F3_F4_EQU 3489 +#define PID_SUBNR5G_PUCCH_F3_F4_IDFT 3490 +#define PID_SUBNR5G_PUCCH_F3_F4_DESPRD 3491 +#define PID_SUBNR5G_PUCCH_F3_F4_DEMOD 3492 +#define PID_SUBNR5G_PUCCH_F3_F4_DESCR 3493 +#define PID_SUBNR5G_PUCCH_F3_F4_DEC 3494 +#define PID_SUBNR5G_PRACH_AGC 3495 +#define PID_SUBNR5G_PRACH_IFFT 3496 +#define PID_SUBNR5G_PRACH_AGC_ALIGN 3497 +#define PID_SUBNR5G_SRS_FFT_CB_SETUP 3498 + +//-------------------------------------------------------------------- +// COMMON SUBTASKS +//-------------------------------------------------------------------- +#define PID_SUB_DL_IFFT 3500 +#define PID_SUB_DL_IFFT_ADD_CP 3501 +#define PID_SUB_UL_FFT 3502 #ifdef __cplusplus } diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..b5747ba --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 7 + + 7 + + 4,5,6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 12 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..478cb0f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 7 + + 7 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 12 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..dd1b5ba --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 7 + + 7 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 12 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_du.dat new file mode 100644 index 0000000..00c7ce7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_du.dat @@ -0,0 +1,163 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=12 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC11 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=400 #in us +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=160 #in us +Ta3_max=256 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=480 +T1a_max_cp_ul=560 + +#U-plane +##Transmission Window +T1a_min_up=280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=360 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_ru.dat new file mode 100644 index 0000000..c30a215 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/config_file_o_ru.dat @@ -0,0 +1,213 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=12 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC11 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +antPrachC0=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC4=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC5=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC6=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC7=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC8=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC9=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC10=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC11=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC12=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC13=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC14=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC15=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC16=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC17=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC18=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC19=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC20=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC21=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC22=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC23=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC24=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC25=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC26=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC27=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC28=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC29=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC30=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC31=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC32=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC33=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC34=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC35=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC36=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC37=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC38=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC39=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC40=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC41=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC42=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC43=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC44=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC45=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC46=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC47=./usecase/cat_a/mu0_10mhz/ant_3.bin + + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=400 #in us +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=160 #in us +Ta3_max=256 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=480 +T1a_max_cp_ul=560 + +#U-plane +##Transmission Window +T1a_min_up=280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=360 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du.cfg new file mode 100644 index 0000000..82f201e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx.cfg new file mode 100644 index 0000000..c524a85 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx2.cfg new file mode 100644 index 0000000..1703d0f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru2.cfg new file mode 100644 index 0000000..f6ba073 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/112/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du.xml index 0d387ec..5656bc4 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du.xml @@ -43,9 +43,9 @@ 6 - 5 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 6 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..eae8215 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..6acab60 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru.xml index 8068127..5a50f51 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..45c4d4c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..aba2ba8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_du.dat index 1618add..cc7ca08 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -119,8 +117,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_ru.dat index 5fba6e1..981b6e4 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -170,8 +168,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du.cfg index 84a7872..0c2e5bd 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU @@ -29,24 +29,6 @@ oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCfgFile0=./config_file_o_du.dat #O-RU0 -#O-XU 0 -#PciBusAddoXu0Vf0=0000:51:01.0 -#PciBusAddoXu0Vf1=0000:51:01.1 -#PciBusAddoXu0Vf2=0000:51:01.2 -#PciBusAddoXu0Vf3=0000:51:01.3 - -#O-XU 1 -#PciBusAddoXu1Vf0=0000:51:01.4 -#PciBusAddoXu1Vf1=0000:51:01.5 -#PciBusAddoXu1Vf2=0000:51:01.6 -#PciBusAddoXu1Vf3=0000:51:01.7 - -#O-XU 2 -#PciBusAddoXu2Vf0=0000:51:02.0 -#PciBusAddoXu2Vf1=0000:51:02.1 -#PciBusAddoXu2Vf2=0000:51:02.2 -#PciBusAddoXu2Vf3=0000:51:02.3 - # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 oXuRem0Mac1=00:11:22:33:00:11 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du2.cfg new file mode 100644 index 0000000..5d1b97d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du_icx2.cfg new file mode 100644 index 0000000..8317a3b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_du_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru2.cfg new file mode 100644 index 0000000..a3b3565 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4e95e46 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/12/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml index 8068127..02263c5 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_du.dat index 1585580..8aeb1e4 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -119,8 +117,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_ru.dat index f9b49db..313d292 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -124,8 +122,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du2.cfg new file mode 100644 index 0000000..b8e7b10 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..0c83c25 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru2.cfg new file mode 100644 index 0000000..a3b3565 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4e95e46 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_10mhz/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du.xml index 0711d4a..7e50af9 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 8 + 4 - 8 + 7 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 6 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1a5a50e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 7 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..a698439 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 10 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2c4bea4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru.xml index 8068127..07302dc 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru.xml @@ -41,19 +41,19 @@ 1 - 6 + 20 - 4 + 7 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..87740ec --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 20 + + 7 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d7c5b54 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 20 + + 7 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du.dat index c8efaad..39d3b4d 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -133,8 +131,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_0.dat index c85f07f..8d4219c 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_0.dat @@ -1,24 +1,10 @@ ####################################################################### # -# Copyright (c) 2020 Intel. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# +# # ####################################################################### # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +28,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -191,8 +176,6 @@ debugStop=0 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings Tadv_cp_dl=25 #in us TODO: update per RU implementation diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_1.dat index 1d07ef3..8d4219c 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_du_1.dat @@ -1,24 +1,10 @@ ####################################################################### # -# Copyright (c) 2020 Intel. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# +# # ####################################################################### # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +28,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -191,8 +176,6 @@ debugStop=0 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings Tadv_cp_dl=25 #in us TODO: update per RU implementation diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru.dat index 2edfc4d..4532cbe 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -183,8 +181,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_0.dat index b7daba4..252ef13 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_0.dat @@ -1,24 +1,10 @@ ####################################################################### # -# Copyright (c) 2020 Intel. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# +# # ####################################################################### # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +28,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=3 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -241,8 +226,6 @@ debugStop=0 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings Tadv_cp_dl=25 #in us TODO: update per RU implementation diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_1.dat index 1406774..252ef13 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/config_file_o_ru_1.dat @@ -1,24 +1,10 @@ ####################################################################### # -# Copyright (c) 2020 Intel. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# +# # ####################################################################### # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +28,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -241,8 +226,6 @@ debugStop=0 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings Tadv_cp_dl=25 #in us TODO: update per RU implementation diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du.cfg index 5afdd45..ec228ad 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 #dpdkMemorySize=10240 oXuNum=1 # numbers of O-RU connected to O-DU oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du2.cfg new file mode 100644 index 0000000..e12adec --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 +#dpdkMemorySize=10240 +oXuNum=1 # numbers of O-RU connected to O-DU +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx.cfg new file mode 100644 index 0000000..0c01f38 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=1 +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +#dpdkMemorySize=10240 +oXuNum=1 # numbers of O-RU connected to O-DU +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx2.cfg new file mode 100644 index 0000000..727d296 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#dpdkMemorySize=10240 +oXuNum=1 # numbers of O-RU connected to O-DU +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru.cfg index 31a15b5..45bf1d1 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru.cfg @@ -18,8 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +mainCore=11 +systemCore=12 # DPDK main I/O core +ioCore=13 # core id +ioWorker=0x4000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml #dpdkMemorySize=10240 oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru2.cfg new file mode 100644 index 0000000..6d88f89 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 # DPDK main I/O core +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +#dpdkMemorySize=10240 +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru_icx2.cfg new file mode 100644 index 0000000..87df182 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/12/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml +#dpdkMemorySize=10240 +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_du.dat index b9429db..7fe2b5b 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -88,8 +86,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_ru.dat index b87671b..81fc810 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -94,9 +92,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du.cfg index 52e6d02..0fa8bd7 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du2.cfg new file mode 100644 index 0000000..1fa6243 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du_icx2.cfg new file mode 100644 index 0000000..d2f1134 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_du_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru.cfg index 927a5f8..3b67bf0 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru2.cfg new file mode 100644 index 0000000..bd53ff4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru_icx2.cfg new file mode 100644 index 0000000..37fb46c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/20/usecase_ru_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_du.dat index b9429db..7fe2b5b 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -88,8 +86,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_ru.dat index b87671b..81fc810 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -94,9 +92,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du.cfg index a082168..86ffbaa 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du2.cfg new file mode 100644 index 0000000..0925d5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always the originator +oXuOwdmMeasMeth=1 # Measurement Method REM_REQ +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=512 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du_icx2.cfg new file mode 100644 index 0000000..ff9ca57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_du_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always the originator +oXuOwdmMeasMeth=1 # Measurement Method REM_REQ +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=512 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru.cfg index 256869b..2dd4002 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru2.cfg new file mode 100644 index 0000000..ced8070 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=1 # Measurement Method REM_REQ +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=512 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru_icx2.cfg new file mode 100644 index 0000000..398f251 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/21/usecase_ru_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=1 # Measurement Method REM_REQ +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=512 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_du.dat index b9429db..7fe2b5b 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -88,8 +86,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_ru.dat index b87671b..81fc810 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -94,9 +92,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du.cfg index d168f8e..6798675 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du2.cfg new file mode 100644 index 0000000..4f482fb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always recipient +oXuOwdmMeasMeth=2 # Measurement Method REQUESTwFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=1024 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du_icx2.cfg new file mode 100644 index 0000000..7902807 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_du_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always recipient +oXuOwdmMeasMeth=2 # Measurement Method REQUESTwFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=1024 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru.cfg index 1bac1ba..cb28e12 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru2.cfg new file mode 100644 index 0000000..0cfeab7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=2 # Measurement Method REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=1024 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru_icx2.cfg new file mode 100644 index 0000000..3d91582 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/22/usecase_ru_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=2 # Measurement Method REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=1024 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_du.dat index 472d248..a0fb49d 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -88,8 +86,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_ru.dat index 42b4ae6..2becab2 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -94,9 +92,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du.cfg index 2470c10..57162cf 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du2.cfg new file mode 100644 index 0000000..bde9e8a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-DU is always recipient +oXuOwdmMeasMeth=3 # Measurement Method REM_REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du_icx2.cfg new file mode 100644 index 0000000..ddca601 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_du_icx2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-DU is always recipient +oXuOwdmMeasMeth=3 # Measurement Method REM_REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru.cfg index d4940dd..a42f124 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru2.cfg new file mode 100644 index 0000000..911867d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-RU is always the initiator +oXuOwdmMeasMeth=3 # Measurement Method REM_REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8f1df13 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/23/usecase_ru_icx2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-RU is always the initiator +oXuOwdmMeasMeth=3 # Measurement Method REM_REQ_WFUP +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_du.dat new file mode 100644 index 0000000..8c7f071 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_du.dat @@ -0,0 +1,132 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=2000 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu0_20mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_ru.dat new file mode 100644 index 0000000..65f57fd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/config_file_o_ru.dat @@ -0,0 +1,139 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=2000 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu0_20mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +#rachOffset=43 # RB offset for prach detection (see RIU spec) +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +antPrachC0=./usecase/cat_a/mu0_20mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu0_20mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu0_20mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu0_20mhz/ant_3.bin + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 # 480 +T1a_max_cp_ul=356 # 560 + +#U-plane +##Transmission Window +T1a_min_up=370 # 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 # 200 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du.cfg new file mode 100644 index 0000000..0fa8bd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du.cfg @@ -0,0 +1,80 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du2.cfg new file mode 100644 index 0000000..901d09d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du_icx2.cfg new file mode 100644 index 0000000..0c84e16 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_du_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru.cfg new file mode 100644 index 0000000..e954d2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru.cfg @@ -0,0 +1,80 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru2.cfg new file mode 100644 index 0000000..4ac6c76 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4370ed0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/24/usecase_ru_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml index 8068127..02263c5 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_du.dat index fa2940a..8ea9728 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -105,8 +103,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_ru.dat index 5493bb9..c1e3042 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -108,9 +106,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du2.cfg new file mode 100644 index 0000000..3ef3405 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..95d6969 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru2.cfg new file mode 100644 index 0000000..e10c89b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4e95e46 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_20mhz/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_du.dat new file mode 100644 index 0000000..93c37ae --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_du.dat @@ -0,0 +1,132 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 # 3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 # 3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=50 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=50 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu0_50mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_50mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_50mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_50mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_50mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu0_50mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu0_50mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu0_50mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu0_50mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu0_50mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu0_50mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu0_50mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu0_50mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu0_50mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu0_50mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu0_50mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_ru.dat new file mode 100644 index 0000000..640a826 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/config_file_o_ru.dat @@ -0,0 +1,139 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=50 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=50 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu0_50mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_50mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_50mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_50mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_50mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu0_50mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu0_50mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu0_50mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu0_50mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu0_50mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu0_50mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu0_50mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu0_50mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu0_50mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu0_50mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu0_50mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +#rachOffset=43 # RB offset for prach detection (see RIU spec) +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +antPrachC0=./usecase/cat_a/mu0_50mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu0_50mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu0_50mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu0_50mhz/ant_3.bin + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 # 480 +T1a_max_cp_ul=356 # 560 + +#U-plane +##Transmission Window +T1a_min_up=370 # 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 # 200 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du.cfg new file mode 100644 index 0000000..0fa8bd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du.cfg @@ -0,0 +1,80 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du2.cfg new file mode 100644 index 0000000..901d09d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du_icx2.cfg new file mode 100644 index 0000000..0c84e16 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_du_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=1 #O-DU is always originator +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru.cfg new file mode 100644 index 0000000..e954d2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru.cfg @@ -0,0 +1,80 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru2.cfg new file mode 100644 index 0000000..4ac6c76 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4370ed0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/20/usecase_ru_icx2.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# One Way Delay Measurements configuration parameters +oXuOwdmInitEn=0 #O-RU is always the recipient +oXuOwdmMeasMeth=0 # Measurement Method REQUEST +oXuOwdmNumSamps=8 # Run 8 samples per port +oXuOwdmFltrType=0 # Simple average +oXuOwdmRespTimeOut=10000000 # 10 ms expressed in ns +oXuOwdmMeasState=0 # Measurement state is INIT +oXuOwdmMeasId=0 # Measurement Id seed +oXuOwdmEnabled=1 # Measurements are enabled +oXuOwdmPlLength=40 # PL for dummy payload in the measurement packet 40 <= PL <= 1400 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..b269928 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..02263c5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_50mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml index 8068127..a0843d8 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml @@ -43,15 +43,15 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..a8ceb0a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b979429 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_du.dat index 006947d..6c3f05d 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -89,8 +87,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_ru.dat index 8d3ff81..4b0cda4 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -90,9 +88,7 @@ nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings Tadv_cp_dl=25 #in us TODO: update per RU implementation diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du2.cfg new file mode 100644 index 0000000..7940f30 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..1703d0f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru2.cfg new file mode 100644 index 0000000..e10c89b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..3f1273c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu0_5mhz/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_du.dat index 22c2cd1..946fca7 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_ru.dat index beeb72e..f9085b1 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -144,7 +142,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru2.cfg new file mode 100644 index 0000000..be90b77 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/101/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_du.dat index 57b63dc..61fa2cd 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_ru.dat index f5c88c6..a2b6123 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -144,7 +142,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du2.cfg new file mode 100644 index 0000000..ce93bd8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du_icx2.cfg new file mode 100644 index 0000000..60b8df2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/102/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du.dat new file mode 100644 index 0000000..54a76d6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du.dat @@ -0,0 +1,136 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du_0.dat new file mode 100644 index 0000000..6eadf3c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_du_0.dat @@ -0,0 +1,133 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,2,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# Assigning 25950KHz bandwidth to mu1 in this case. +PrbElemUl0=0,2,0,14,0,0,0,16,0 + +#Timing Parameters +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru.dat new file mode 100644 index 0000000..8af0903 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru.dat @@ -0,0 +1,151 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru_0.dat new file mode 100644 index 0000000..2ea9ef5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/config_file_o_ru_0.dat @@ -0,0 +1,146 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,2,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,2,0,14,0,0,0,16,0 + +#Timing for mu=0 +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du.cfg new file mode 100644 index 0000000..d54aae0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du.cfg @@ -0,0 +1,78 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du2.cfg new file mode 100644 index 0000000..680395e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du_icx2.cfg new file mode 100644 index 0000000..949f808 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_du_icx2.cfg @@ -0,0 +1,81 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru.cfg new file mode 100644 index 0000000..a6559a5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru2.cfg new file mode 100644 index 0000000..dfa5989 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru_icx2.cfg new file mode 100644 index 0000000..e15367a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/104/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du.dat new file mode 100644 index 0000000..c9b18c9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du.dat @@ -0,0 +1,135 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +#PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +#PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du_0.dat new file mode 100644 index 0000000..07fadcf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_du_0.dat @@ -0,0 +1,131 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=0 #-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,53,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,53,0,14,0,0,0,16,0 + + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +#Timing Parameters +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru.dat new file mode 100644 index 0000000..19f9e5e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru.dat @@ -0,0 +1,151 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +#PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +#PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru_0.dat new file mode 100644 index 0000000..87bc5f8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/config_file_o_ru_0.dat @@ -0,0 +1,146 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=0 #-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,53,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,53,0,14,0,0,0,16,0 + + +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled +#Timing for mu=0 +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du.cfg new file mode 100644 index 0000000..25ec5eb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=18 # core id +ioWorker=0x0000000000080000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +dpdkMemorySize=12228 #18432 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile1=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile2=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile3=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du2.cfg new file mode 100644 index 0000000..f35ccb3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du2.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=12228 #18432 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile1=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile2=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile3=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du_icx2.cfg new file mode 100644 index 0000000..7b97d97 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_du_icx2.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=12228 #18432 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile1=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile2=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +oXuCfgFile3=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru.cfg new file mode 100644 index 0000000..8b8e5c3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru.cfg @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=20 +ioCore=34 # core id +ioWorker=0x0000000800000000 # mask [0- no workers] +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile1=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile2=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile3=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru2.cfg new file mode 100644 index 0000000..dad5077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru2.cfg @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile1=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile2=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile3=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru_icx2.cfg new file mode 100644 index 0000000..33f3648 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1044/usecase_ru_icx2.cfg @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile1=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile2=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + +oXuCfgFile3=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du.dat new file mode 100644 index 0000000..33deba0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du.dat @@ -0,0 +1,144 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC25=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +#PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +#PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du_0.dat new file mode 100644 index 0000000..210e6bb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_du_0.dat @@ -0,0 +1,141 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=0 #-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC25=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,53,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,53,0,14,0,0,0,16,0 + + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +#Timing Parameters +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru.dat new file mode 100644 index 0000000..e47d25d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru.dat @@ -0,0 +1,174 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC25=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 + +antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antPrachC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antPrachC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antPrachC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antPrachC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antPrachC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antPrachC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antPrachC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 + +antPrachC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC24=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +#antPrachC25=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +#PrbElemDl1=138,135,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +#PrbElemUl1=138,135,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru_0.dat new file mode 100644 index 0000000..6c94d58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/config_file_o_ru_0.dat @@ -0,0 +1,175 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=0 #-48 +ttiPeriod=1000 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antC25=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC2 +antPrachC9=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +antPrachC10=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +antPrachC11=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +antPrachC12=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 +antPrachC13=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antPrachC14=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antPrachC15=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 + +antPrachC16=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC17=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC18=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC19=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC20=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC21=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC22=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC23=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC24=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC2 +#antPrachC25=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,53,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,53,0,14,0,0,0,16,0 + + +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 #in us 400 +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=100 #in us +Ta3_max=140 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=300 ## 480 +T1a_max_cp_ul=356 ## 560 + +#U-plane +##Transmission Window +T1a_min_up=370 ## 280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=400 ## 200 +########################################################### diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du.cfg new file mode 100644 index 0000000..faae477 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du.cfg @@ -0,0 +1,80 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +dpdkMemorySize=12288 #18432 +iovaMode=0 +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du2.cfg new file mode 100644 index 0000000..a2af1cf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du2.cfg @@ -0,0 +1,83 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=12288 #18432 +iovaMode=0 +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du_icx2.cfg new file mode 100644 index 0000000..282a387 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_du_icx2.cfg @@ -0,0 +1,83 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=12288 #18432 +iovaMode=0 +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=b4:96:91:94:de:40 +# oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# oXuRem0Mac2=b4:96:91:94:de:40 +# oXuRem0Mac3=b4:96:91:94:de:41 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru.cfg new file mode 100644 index 0000000..a6559a5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru2.cfg new file mode 100644 index 0000000..dfa5989 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru_icx2.cfg new file mode 100644 index 0000000..e15367a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/1046/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_0.dat # RU0 num0 +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_du.dat new file mode 100644 index 0000000..795beae --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_du.dat @@ -0,0 +1,123 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,273,0,14,1,0,1,14,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,273,0,14,1,0,1,14,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_ru.dat new file mode 100644 index 0000000..2397cf5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/config_file_o_ru.dat @@ -0,0 +1,126 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +freqOffset=-3276 +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,273,0,14,1,0,1,14,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,273,0,14,1,0,1,14,1 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du.cfg new file mode 100644 index 0000000..e7f5013 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac1= +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du2.cfg new file mode 100644 index 0000000..500bc26 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du_icx2.cfg new file mode 100644 index 0000000..6cafc93 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru.cfg new file mode 100644 index 0000000..45b9f2e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru2.cfg new file mode 100644 index 0000000..e6af59f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7d5839c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/114/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2020 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_du.dat index 1fe1649..c65b7c5 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_du.dat @@ -94,8 +94,6 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_ru.dat index e8dcf92..8f39bd6 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/config_file_o_ru.dat @@ -112,8 +112,6 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings Tadv_cp_dl=25 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du2.cfg new file mode 100644 index 0000000..9140b3a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du_icx2.cfg new file mode 100644 index 0000000..f1fcbad --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru2.cfg new file mode 100644 index 0000000..f6ba073 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/2/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_du.dat index 71779af..b9ae95d 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_ru.dat index 204bed5..80d511e 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du.cfg index 1405c36..edacea0 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du2.cfg new file mode 100644 index 0000000..fafd296 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du_icx2.cfg new file mode 100644 index 0000000..ac5fe57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_du_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru.cfg index 449faa3..d0ab6be 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru2.cfg new file mode 100644 index 0000000..b5926a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8a4e794 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/201/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du.xml index 9ff6cfe..3b2292f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 2 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..ff83202 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..c405e52 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml index 9ff6cfe..c237d7f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 2 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3479e4f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..f0ecd67 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_0.dat index 71779af..b9ae95d 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_1.dat index 32d5b7e..8a0d844 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_0.dat index 204bed5..80d511e 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_1.dat index d29143f..93af601 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du.cfg index fe44778..1f6bfa6 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du2.cfg new file mode 100644 index 0000000..0b7c1bb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du2.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du_icx2.cfg new file mode 100644 index 0000000..42604fa --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_du_icx2.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru.cfg index 6200ecb..26c3ea2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=2 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru2.cfg new file mode 100644 index 0000000..3e2a275 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru_icx2.cfg new file mode 100644 index 0000000..3212fe4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/202/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du.xml index 7c34e7e..23622a0 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..2c76054 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..a39bba2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru.xml index 7c34e7e..9074d55 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3cc7a95 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..9f441ce --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_0.dat index 71779af..b9ae95d 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_1.dat index 32d5b7e..8a0d844 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_2.dat index 3c0406d..263662f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_du_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_0.dat index 204bed5..80d511e 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_1.dat index d29143f..93af601 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_2.dat index 02756f6..8d2cef4 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/config_file_o_ru_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du.cfg index 489d02a..72d2a24 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du.cfg @@ -18,11 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml -dpdkMemorySize=8192 #18432 +dpdkMemorySize=10240 #18432 iovaMode=0 oXuNum=3 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du2.cfg new file mode 100644 index 0000000..56c7d10 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du2.cfg @@ -0,0 +1,78 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=10240 #18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du_icx2.cfg new file mode 100644 index 0000000..e58ffc6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_du_icx2.cfg @@ -0,0 +1,78 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=10240 #18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru.cfg index abd02cd..c4e3537 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru.cfg @@ -18,10 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml -dpdkMemorySize=8192 #18432 +dpdkMemorySize=10240 #18432 iovaMode=0 oXuNum=3 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru2.cfg new file mode 100644 index 0000000..150090a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=10240 #18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c9dad7a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/203/usecase_ru_icx2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=10240 #18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du.xml index ad68b78..2a6f71a 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 8 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 4 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..139cfd3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 8 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..a0eecd5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 8 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru.xml index ad68b78..d919e00 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 10 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 4 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..088e404 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..245cb7b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_0.dat index 71779af..b9ae95d 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_1.dat index 32d5b7e..8a0d844 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_2.dat index 3c0406d..263662f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_3.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_3.dat index 32d5b7e..8a0d844 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_3.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_du_3.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_0.dat index 204bed5..80d511e 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_1.dat index d29143f..93af601 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_2.dat index 02756f6..8d2cef4 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_3.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_3.dat index d29143f..93af601 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_3.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/config_file_o_ru_3.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du.cfg index cf03f0d..66d88a3 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du.cfg @@ -18,11 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml -dpdkMemorySize=10240 +dpdkMemorySize=11264 iovaMode=0 oXuNum=4 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du2.cfg new file mode 100644 index 0000000..9288322 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=11264 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du_icx2.cfg new file mode 100644 index 0000000..c2a3c4b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_du_icx2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=11264 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru.cfg index b292a0f..f293ed5 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru.cfg @@ -18,12 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=21 -ioCore=22 # core id -ioWorker=0x4000000000000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml -dpdkMemorySize=10240 +dpdkMemorySize=11264 iovaMode=0 oXuNum=4 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru2.cfg new file mode 100644 index 0000000..76b5f97 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=11264 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru_icx2.cfg new file mode 100644 index 0000000..df893db --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/204/usecase_ru_icx2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=11264 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_du.dat index 12bc09e..93ddf21 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -54,7 +53,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_ru.dat index 72738dc..180940f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -54,7 +53,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru2.cfg new file mode 100644 index 0000000..f6ba073 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/3/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_du.dat index 1594eac..6bfc3f4 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_ru.dat index 0bf0e81..58a9d2a 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru.cfg index a400176..4c6f715 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru2.cfg new file mode 100644 index 0000000..fd28564 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru_icx2.cfg new file mode 100644 index 0000000..bd7365e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/401/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du.xml index 9ff6cfe..3b2292f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 2 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..ff83202 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..c405e52 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru.xml index 9ff6cfe..c237d7f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 2 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3479e4f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..f0ecd67 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_0.dat index 5f6c3b5..10c6bb2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_1.dat index d8aeb05..aa8723f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_0.dat index d947593..0790ad8 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_1.dat index b7bf81b..cbda8eb 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du.cfg index d4e45eb..5062d45 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=2 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du2.cfg new file mode 100644 index 0000000..dd19e0f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du2.cfg @@ -0,0 +1,74 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du_icx2.cfg new file mode 100644 index 0000000..c04ca2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_du_icx2.cfg @@ -0,0 +1,74 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru.cfg index 6200ecb..26c3ea2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=2 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru2.cfg new file mode 100644 index 0000000..3e2a275 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru_icx2.cfg new file mode 100644 index 0000000..3212fe4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/402/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du.xml index 7c34e7e..f784b95 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 10 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..7cad805 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..8d090a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru.xml index 7c34e7e..9074d55 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3cc7a95 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..9f441ce --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_0.dat index 5f6c3b5..10c6bb2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_1.dat index d8aeb05..aa8723f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_2.dat index 6c97a1e..c711194 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_du_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_0.dat index d947593..0790ad8 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_1.dat index b7bf81b..cbda8eb 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_2.dat index f3c06a3..e4a19f6 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/config_file_o_ru_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du.cfg index 8651e6b..3ea0f74 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du.cfg @@ -18,11 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml -dpdkMemorySize=8192 +dpdkMemorySize=10240 iovaMode=0 oXuNum=3 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du2.cfg new file mode 100644 index 0000000..dcd2ac2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du2.cfg @@ -0,0 +1,78 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du_icx2.cfg new file mode 100644 index 0000000..30f7667 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_du_icx2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru.cfg index 09e13be..595c19a 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru.cfg @@ -18,13 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=21 -ioCore=22 # core id +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml -ioWorker=0x4000000000000000 # mask [0- no workers] - -dpdkMemorySize=16384 +dpdkMemorySize=10240 iovaMode=0 oXuNum=3 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru2.cfg new file mode 100644 index 0000000..409fd2d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru_icx2.cfg new file mode 100644 index 0000000..53a2641 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/403/usecase_ru_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du.xml index ab4426e..3cde6b5 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 12 - 6 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 4 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1640b4f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..3cde6b5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..6471af3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru.xml index ad68b78..1b36302 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 12 - 4 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 4 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3f36303 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..9694f33 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_0.dat index 5f6c3b5..10c6bb2 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_1.dat index d8aeb05..aa8723f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_2.dat index 6c97a1e..c711194 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_3.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_3.dat index d8aeb05..aa8723f 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_3.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_du_3.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_0.dat index d947593..0790ad8 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_0.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_0.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_1.dat index b7bf81b..cbda8eb 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_1.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_1.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_2.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_2.dat index f3c06a3..e4a19f6 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_2.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_2.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_3.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_3.dat index b7bf81b..cbda8eb 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_3.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/config_file_o_ru_3.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -48,7 +47,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 #duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF #ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -139,7 +137,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##O-RU Settings Tadv_cp_dl=125 # in us diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du.cfg index 3be8fe2..e9ae519 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du.cfg @@ -18,11 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml -dpdkMemorySize=16384 +dpdkMemorySize=12228 iovaMode=0 oXuNum=4 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du2.cfg new file mode 100644 index 0000000..dde14bf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx.cfg new file mode 100644 index 0000000..4f32179 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx.cfg @@ -0,0 +1,82 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx2.cfg new file mode 100644 index 0000000..9dca2a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_du_icx2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru.cfg index 8984b75..6046b5c 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru.cfg @@ -18,12 +18,11 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=21 -ioCore=22 # core id -ioWorker=0x800000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml -dpdkMemorySize=16384 +dpdkMemorySize=12228 iovaMode=0 oXuNum=4 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru2.cfg new file mode 100644 index 0000000..fae65c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru_icx2.cfg new file mode 100644 index 0000000..368be82 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/404/usecase_ru_icx2.cfg @@ -0,0 +1,85 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_2.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_3.dat #O-RU3 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_du.dat new file mode 100644 index 0000000..0539b7b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_du.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_ru.dat new file mode 100644 index 0000000..0b41891 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/config_file_o_ru.dat @@ -0,0 +1,181 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du.cfg new file mode 100644 index 0000000..f11b5c2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du_icx2.cfg new file mode 100644 index 0000000..60b8df2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru.cfg new file mode 100644 index 0000000..44de535 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru2.cfg new file mode 100644 index 0000000..c5d4473 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru_icx2.cfg new file mode 100644 index 0000000..93a7c4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/411/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..43c81cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 9,65,10,66,11,67,12,68,13,69 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..ff83202 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..8ba0a5e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,37,6,38,7,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..c405e52 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..c237d7f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3479e4f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..f0ecd67 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_0.dat new file mode 100644 index 0000000..10c6bb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_0.dat @@ -0,0 +1,165 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_1.dat new file mode 100644 index 0000000..aa8723f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_du_1.dat @@ -0,0 +1,165 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_0.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_0.dat new file mode 100644 index 0000000..0790ad8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_0.dat @@ -0,0 +1,181 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_1.dat new file mode 100644 index 0000000..cbda8eb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/config_file_o_ru_1.dat @@ -0,0 +1,181 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du.cfg new file mode 100644 index 0000000..6c650fa --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du2.cfg new file mode 100644 index 0000000..90e6394 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 2 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx.cfg new file mode 100644 index 0000000..f1bf11e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx2.cfg new file mode 100644 index 0000000..f5fde10 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=12288 +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_du_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_du_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_du_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +#remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 +#remote O-XU 2 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru.cfg new file mode 100644 index 0000000..a7bac1f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_1.dat #O-RU3 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru2.cfg new file mode 100644 index 0000000..a22b4cf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 2 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx.cfg new file mode 100644 index 0000000..feccf8c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 +systemCore=19 +ioCore=20 # core id +ioWorker=0x200000 # mask [0- no workers] +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received before declaring link status as down +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_1.dat #O-RU3 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b1b1819 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/412/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml +dpdkMemorySize=12288 + +oXuNum=2 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +# IEEE 802.1Q LBM +lbmEnable=1 # Enable IEEE 802.1Q LBM messages on fronthaul interface +NumRetransmissions=10 # Number of LBM retransmission attempted by O-DU if LBR is not received +lbrTimeout=1 # Time interval (in milli seconds) for LBR receipt time out +lbmPeriodicity=100 # Time interval (in milli seconds) between two LBM transmissions from O-DU + +oXuCfgFile0=./config_file_o_ru_0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru_0.dat #O-RU2 +oXuCfgFile3=./config_file_o_ru_1.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 2 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_du.dat new file mode 100644 index 0000000..1b31c32 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_du.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_ru.dat new file mode 100644 index 0000000..2122660 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/config_file_o_ru.dat @@ -0,0 +1,181 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,0,0,0,16,0 +#PrbElemDl2=72,36,0,14,3,1,0,16,1 +#PrbElemDl3=108,36,0,14,4,1,0,16,1 +#PrbElemDl4=144,36,0,14,5,1,0,16,1 +#PrbElemDl5=180,36,0,14,6,1,0,16,1 +#PrbElemDl6=216,36,0,14,7,1,0,16,1 +#PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du.cfg new file mode 100644 index 0000000..13ec07b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du_icx2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru.cfg new file mode 100644 index 0000000..52d82c7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru2.cfg new file mode 100644 index 0000000..3504bc5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru_icx2.cfg new file mode 100644 index 0000000..9d3f539 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/421/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_du.dat new file mode 100644 index 0000000..475d6fc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_du.dat @@ -0,0 +1,161 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams + +PrbElemDl0=0,137,0,14,0,0,0,16,0,0,0xFE6 +PrbElemDl1=0,137,0,14,0,0,0,16,0,0,0x19 +PrbElemDl2=137,136,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_ru.dat new file mode 100644 index 0000000..8b3a526 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/config_file_o_ru.dat @@ -0,0 +1,175 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0,0,0xFE6 +PrbElemDl1=0,137,0,14,0,0,0,16,0,0,0x19 +PrbElemDl2=137,136,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du.cfg new file mode 100644 index 0000000..aa33aac --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du2.cfg new file mode 100644 index 0000000..5783e9f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du_icx2.cfg new file mode 100644 index 0000000..5466637 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_du_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru.cfg new file mode 100644 index 0000000..fa9485d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru2.cfg new file mode 100644 index 0000000..cc50435 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7977fef --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/441/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..f784b95 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..7cad805 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..8d090a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..9074d55 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..3cc7a95 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..9f441ce --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_du.dat new file mode 100644 index 0000000..475d6fc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_du.dat @@ -0,0 +1,161 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams + +PrbElemDl0=0,137,0,14,0,0,0,16,0,0,0xFE6 +PrbElemDl1=0,137,0,14,0,0,0,16,0,0,0x19 +PrbElemDl2=137,136,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_ru.dat new file mode 100644 index 0000000..8b3a526 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/config_file_o_ru.dat @@ -0,0 +1,175 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +#antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +#antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +#antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +#antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +#antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +#antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +#antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0,0,0xFE6 +PrbElemDl1=0,137,0,14,0,0,0,16,0,0,0x19 +PrbElemDl2=137,136,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,0,0,0,16,0 +#PrbElemUl2=72,36,0,14,3,1,0,16,1 +#PrbElemUl3=108,36,0,14,4,1,0,16,1 +#PrbElemUl4=144,36,0,14,5,1,0,16,1 +#PrbElemUl5=180,36,0,14,6,1,0,16,1 +#PrbElemUl6=216,36,0,14,7,1,0,16,1 +#PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du.cfg new file mode 100644 index 0000000..19470a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dpdkMemorySize=10240 +iovaMode=0 +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +oXuCfgFile1=./config_file_o_du.dat #O-RU1 +oXuCfgFile2=./config_file_o_du.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bc +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du2.cfg new file mode 100644 index 0000000..0220a79 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=10240 +iovaMode=0 +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +oXuCfgFile1=./config_file_o_du.dat #O-RU1 +oXuCfgFile2=./config_file_o_du.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du_icx2.cfg new file mode 100644 index 0000000..e3503e2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_du_icx2.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +oXuCfgFile1=./config_file_o_du.dat #O-RU1 +oXuCfgFile2=./config_file_o_du.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru.cfg new file mode 100644 index 0000000..b583c8e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml +dpdkMemorySize=10240 +iovaMode=0 +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru2.cfg new file mode 100644 index 0000000..10af9da --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +dpdkMemorySize=10240 +iovaMode=0 +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru_icx2.cfg new file mode 100644 index 0000000..36abf1c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/443/usecase_ru_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml +dpdkMemorySize=10240 +iovaMode=0 +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx0.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx0.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx0.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx1.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx1.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx1.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx2.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx2.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx3.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx3.cfg new file mode 100644 index 0000000..8c5bb03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx3.cfg @@ -0,0 +1,13 @@ +########################################################### +##Section Settings + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemUl0=0,144,13,1,0,0,0,16,0,0,0 + +PrbElemUlCCMask0=1 +PrbElemUlAntCMask0=3 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx4.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx4.cfg new file mode 100644 index 0000000..a4552d7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx4.cfg @@ -0,0 +1,31 @@ +########################################################### +##Section Settings + +#nPrbElemUl=7 +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemUl0=0,220,0,14,0,0,0,16,0,0,0 +PrbElemUl1=224,2,0,1,0,0,0,16,0,0,0 +PrbElemUl2=234,2,0,4,0,0,0,16,0,0,0 +PrbElemUl3=244,4,0,2,0,0,0,16,0,0,0 +#PrbElemUl4=40,180,2,2,5,1,0,16,1,0,0 +#PrbElemUl5=234,2,2,2,6,1,0,16,1,0,0 +#PrbElemUl6=40,180,4,10,7,1,0,16,1,0,0 +#PrbElemUl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### +PrbElemUlCCMask0=1 +PrbElemUlAntCMask0=3 +PrbElemUlCCMask1=1 +PrbElemUlAntCMask1=3 +PrbElemUlCCMask2=1 +PrbElemUlAntCMask2=3 +PrbElemUlCCMask3=1 +PrbElemUlAntCMask3=3 +PrbElemUlCCMask4=1 +PrbElemUlAntCMask4=3 +PrbElemUlCCMask5=1 +PrbElemUlAntCMask5=3 +PrbElemUlCCMask6=1 +PrbElemUlAntCMask6=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx5.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx5.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx5.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx6.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx6.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx6.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx7.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx7.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx7.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx8.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx8.cfg new file mode 100644 index 0000000..0457eed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx8.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemUl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx9.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx9.cfg new file mode 100644 index 0000000..a4552d7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumRx9.cfg @@ -0,0 +1,31 @@ +########################################################### +##Section Settings + +#nPrbElemUl=7 +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemUl0=0,220,0,14,0,0,0,16,0,0,0 +PrbElemUl1=224,2,0,1,0,0,0,16,0,0,0 +PrbElemUl2=234,2,0,4,0,0,0,16,0,0,0 +PrbElemUl3=244,4,0,2,0,0,0,16,0,0,0 +#PrbElemUl4=40,180,2,2,5,1,0,16,1,0,0 +#PrbElemUl5=234,2,2,2,6,1,0,16,1,0,0 +#PrbElemUl6=40,180,4,10,7,1,0,16,1,0,0 +#PrbElemUl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### +PrbElemUlCCMask0=1 +PrbElemUlAntCMask0=3 +PrbElemUlCCMask1=1 +PrbElemUlAntCMask1=3 +PrbElemUlCCMask2=1 +PrbElemUlAntCMask2=3 +PrbElemUlCCMask3=1 +PrbElemUlAntCMask3=3 +PrbElemUlCCMask4=1 +PrbElemUlAntCMask4=3 +PrbElemUlCCMask5=1 +PrbElemUlAntCMask5=3 +PrbElemUlCCMask6=1 +PrbElemUlAntCMask6=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx0.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx0.cfg new file mode 100644 index 0000000..8cef2ea --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx0.cfg @@ -0,0 +1,34 @@ +########################################################### +##Section Settings + +#nPrbElemDl=8 +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=96,48,0,1,0,0,0,16,0,0,0 +PrbElemDl2=24,180,1,13,0,0,0,16,0,0,0 +PrbElemDl3=0,20,4,8,0,0,0,16,0,0,0 +#PrbElemDl4=24,180,4,4,5,1,0,16,1,0,0 +#PrbElemDl5=0,20,8,4,6,1,0,16,1,0,0 +#PrbElemDl6=24,180,8,4,7,1,0,16,1,0,0 +#PrbElemDl7=24,180,12,2,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 +PrbElemDlCCMask3=1 +PrbElemDlAntCMask3=3 +PrbElemDlCCMask4=1 +PrbElemDlAntCMask4=3 +PrbElemDlCCMask5=1 +PrbElemDlAntCMask5=3 +PrbElemDlCCMask6=1 +PrbElemDlAntCMask6=3 +PrbElemDlCCMask7=1 +PrbElemDlAntCMask7=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx1.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx1.cfg new file mode 100644 index 0000000..249f420 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx1.cfg @@ -0,0 +1,34 @@ +########################################################### +##Section Settings + +#nPrbElemDl=8 +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=12,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=120,48,0,1,0,0,0,16,0,0,0 +PrbElemDl2=24,96,1,13,0,0,0,16,0,0,0 +PrbElemDl3=0,20,2,8,0,0,0,16,0,0,0 +#PrbElemDl4=24,96,2,4,5,1,0,16,1,0,0 +#PrbElemDl5=0,20,6,4,6,1,0,16,1,0,0 +#PrbElemDl6=24,96,6,4,7,1,0,16,1,0,0 +#PrbElemDl7=24,96,10,4,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 +PrbElemDlCCMask3=1 +PrbElemDlAntCMask3=3 +PrbElemDlCCMask4=1 +PrbElemDlAntCMask4=3 +PrbElemDlCCMask5=1 +PrbElemDlAntCMask5=3 +PrbElemDlCCMask6=1 +PrbElemDlAntCMask6=3 +PrbElemDlCCMask7=1 +PrbElemDlAntCMask7=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx2.cfg new file mode 100644 index 0000000..f85878f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx2.cfg @@ -0,0 +1,22 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=24,96,1,13,0,0,0,16,0,0,0 +PrbElemDl2=120,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx3.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx3.cfg new file mode 100644 index 0000000..8847c3f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx3.cfg @@ -0,0 +1,23 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=0,96,1,9,0,0,0,16,0,0,0 +PrbElemDl2=96,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx4.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx4.cfg new file mode 100644 index 0000000..59f28d1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx4.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemDl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx5.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx5.cfg new file mode 100644 index 0000000..5fd1ec0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx5.cfg @@ -0,0 +1,23 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=24,96,1,13,0,0,0,16,0,0,0 +PrbElemDl2=120,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx6.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx6.cfg new file mode 100644 index 0000000..5fd1ec0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx6.cfg @@ -0,0 +1,23 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=24,96,1,13,0,0,0,16,0,0,0 +PrbElemDl2=120,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx7.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx7.cfg new file mode 100644 index 0000000..5fd1ec0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx7.cfg @@ -0,0 +1,23 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=24,96,1,13,0,0,0,16,0,0,0 +PrbElemDl2=120,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx8.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx8.cfg new file mode 100644 index 0000000..8847c3f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx8.cfg @@ -0,0 +1,23 @@ +########################################################### +##Section Settings + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,48,0,1,0,0,0,16,0,0,0 +PrbElemDl1=0,96,1,9,0,0,0,16,0,0,0 +PrbElemDl2=96,48,1,1,0,0,0,16,0,0,0 +#PrbElemDl3=108,36,0,14,4,1,0,16,1,0,0 +#PrbElemDl4=144,36,0,14,5,1,0,16,1,0,0 +#PrbElemDl5=180,36,0,14,6,1,0,16,1,0,0 +#PrbElemDl6=216,36,0,14,7,1,0,16,1,0,0 +#PrbElemDl7=252,21,0,14,8,1,0,16,1,0,0 + +########################################################### + +PrbElemDlCCMask0=1 +PrbElemDlAntCMask0=3 +PrbElemDlCCMask1=1 +PrbElemDlAntCMask1=3 +PrbElemDlCCMask2=1 +PrbElemDlAntCMask2=3 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx9.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx9.cfg new file mode 100644 index 0000000..59f28d1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/SlotNumTx9.cfg @@ -0,0 +1,6 @@ +########################################################### +##Section Settings + +nPrbElemDl=0 + +########################################################### \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_du.dat new file mode 100644 index 0000000..fb835c2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_du.dat @@ -0,0 +1,193 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Number of UL Antennas per CC + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUDDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:00:01 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:00:00 # O-RU VF for O-RU app +duMac1=00:11:22:33:00:11 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:00:10 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=1 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled + +nPrbElemDl=6 + +nPrbElemUl=6 + +SlotNumTx0=./SlotNumTx0.cfg +SlotNumTx1=./SlotNumTx1.cfg +SlotNumTx2=./SlotNumTx2.cfg +SlotNumTx3=./SlotNumTx3.cfg +SlotNumTx4=./SlotNumTx4.cfg +SlotNumTx5=./SlotNumTx5.cfg +SlotNumTx6=./SlotNumTx6.cfg +SlotNumTx7=./SlotNumTx7.cfg +SlotNumTx8=./SlotNumTx8.cfg +SlotNumTx9=./SlotNumTx9.cfg +SlotNumTx10=./SlotNumTx0.cfg +SlotNumTx11=./SlotNumTx1.cfg +SlotNumTx12=./SlotNumTx2.cfg +SlotNumTx13=./SlotNumTx3.cfg +SlotNumTx14=./SlotNumTx4.cfg +SlotNumTx15=./SlotNumTx5.cfg +SlotNumTx16=./SlotNumTx6.cfg +SlotNumTx17=./SlotNumTx7.cfg +SlotNumTx18=./SlotNumTx8.cfg +SlotNumTx19=./SlotNumTx9.cfg + +SlotNumRx0=./SlotNumRx0.cfg +SlotNumRx1=./SlotNumRx1.cfg +SlotNumRx2=./SlotNumRx2.cfg +SlotNumRx3=./SlotNumRx3.cfg +SlotNumRx4=./SlotNumRx4.cfg +SlotNumRx5=./SlotNumRx5.cfg +SlotNumRx6=./SlotNumRx6.cfg +SlotNumRx7=./SlotNumRx7.cfg +SlotNumRx8=./SlotNumRx8.cfg +SlotNumRx9=./SlotNumRx9.cfg +SlotNumRx10=./SlotNumRx0.cfg +SlotNumRx11=./SlotNumRx1.cfg +SlotNumRx12=./SlotNumRx2.cfg +SlotNumRx13=./SlotNumRx3.cfg +SlotNumRx14=./SlotNumRx4.cfg +SlotNumRx15=./SlotNumRx5.cfg +SlotNumRx16=./SlotNumRx6.cfg +SlotNumRx17=./SlotNumRx7.cfg +SlotNumRx18=./SlotNumRx8.cfg +SlotNumRx19=./SlotNumRx9.cfg +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=392 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_ru.dat new file mode 100644 index 0000000..cfcde24 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/config_file_o_ru.dat @@ -0,0 +1,210 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=1 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled + +nPrbElemDl=6 + +nPrbElemUl=6 + +SlotNumTx0=./SlotNumTx0.cfg +SlotNumTx1=./SlotNumTx1.cfg +SlotNumTx2=./SlotNumTx2.cfg +SlotNumTx3=./SlotNumTx3.cfg +SlotNumTx4=./SlotNumTx4.cfg +SlotNumTx5=./SlotNumTx5.cfg +SlotNumTx6=./SlotNumTx6.cfg +SlotNumTx7=./SlotNumTx7.cfg +SlotNumTx8=./SlotNumTx8.cfg +SlotNumTx9=./SlotNumTx9.cfg +SlotNumTx10=./SlotNumTx0.cfg +SlotNumTx11=./SlotNumTx1.cfg +SlotNumTx12=./SlotNumTx2.cfg +SlotNumTx13=./SlotNumTx3.cfg +SlotNumTx14=./SlotNumTx4.cfg +SlotNumTx15=./SlotNumTx5.cfg +SlotNumTx16=./SlotNumTx6.cfg +SlotNumTx17=./SlotNumTx7.cfg +SlotNumTx18=./SlotNumTx8.cfg +SlotNumTx19=./SlotNumTx9.cfg + +SlotNumRx0=./SlotNumRx0.cfg +SlotNumRx1=./SlotNumRx1.cfg +SlotNumRx2=./SlotNumRx2.cfg +SlotNumRx3=./SlotNumRx3.cfg +SlotNumRx4=./SlotNumRx4.cfg +SlotNumRx5=./SlotNumRx5.cfg +SlotNumRx6=./SlotNumRx6.cfg +SlotNumRx7=./SlotNumRx7.cfg +SlotNumRx8=./SlotNumRx8.cfg +SlotNumRx9=./SlotNumRx9.cfg +SlotNumRx10=./SlotNumRx0.cfg +SlotNumRx11=./SlotNumRx1.cfg +SlotNumRx12=./SlotNumRx2.cfg +SlotNumRx13=./SlotNumRx3.cfg +SlotNumRx14=./SlotNumRx4.cfg +SlotNumRx15=./SlotNumRx5.cfg +SlotNumRx16=./SlotNumRx6.cfg +SlotNumRx17=./SlotNumRx7.cfg +SlotNumRx18=./SlotNumRx8.cfg +SlotNumRx19=./SlotNumRx9.cfg + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=392 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du.cfg new file mode 100644 index 0000000..4e55ec0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +#oXuRem0Mac2=00:11:22:33:00:21 +#oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +#oXuRem1Mac0=00:11:22:33:00:00 +#oXuRem1Mac1=00:11:22:33:00:10 +# remote O-XU 1 Eth Link 1 +#oXuRem1Mac2=00:11:22:33:01:21 +#oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +#oXuRem2Mac0=00:11:22:33:02:01 +#oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +#oXuRem2Mac2=00:11:22:33:02:21 +#oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du2.cfg new file mode 100644 index 0000000..806bfcd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +#oXuRem0Mac2=00:11:22:33:00:21 +#oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +#oXuRem1Mac0=00:11:22:33:00:00 +#oXuRem1Mac1=00:11:22:33:00:10 +# remote O-XU 1 Eth Link 1 +#oXuRem1Mac2=00:11:22:33:01:21 +#oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +#oXuRem2Mac0=00:11:22:33:02:01 +#oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +#oXuRem2Mac2=00:11:22:33:02:21 +#oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du_icx2.cfg new file mode 100644 index 0000000..2b2df9e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_du_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +#oXuRem0Mac2=00:11:22:33:00:21 +#oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +#oXuRem1Mac0=00:11:22:33:00:00 +#oXuRem1Mac1=00:11:22:33:00:10 +# remote O-XU 1 Eth Link 1 +#oXuRem1Mac2=00:11:22:33:01:21 +#oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +#oXuRem2Mac0=00:11:22:33:02:01 +#oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +#oXuRem2Mac2=00:11:22:33:02:21 +#oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru.cfg new file mode 100644 index 0000000..f21e8c2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru2.cfg new file mode 100644 index 0000000..b5c9bd2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru_icx2.cfg new file mode 100644 index 0000000..2d389b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/5/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +dlCpProcBurst=1 +#dpdkMemorySize=20480 + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..80064ed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..7efa028 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..c0d6939 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..1c4b165 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..9c908da --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..1be979c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_du.dat new file mode 100644 index 0000000..86721d9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_du.dat @@ -0,0 +1,140 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,1,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,1,0,0,16,0 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_ru.dat new file mode 100644 index 0000000..ce96cf5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/config_file_o_ru.dat @@ -0,0 +1,155 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC1 +antPrachC5=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC1 +antPrachC6=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC1 +antPrachC7=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC1 +antPrachC8=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC3 +antPrachC13=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC3 +antPrachC14=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC3 +antPrachC15=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,137,0,14,0,0,0,16,0 +PrbElemDl1=137,136,0,14,1,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,137,0,14,0,0,0,16,0 +PrbElemUl1=137,136,0,14,1,0,0,16,0 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du.cfg new file mode 100644 index 0000000..56aa0e1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du2.cfg new file mode 100644 index 0000000..cb554cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du_icx2.cfg new file mode 100644 index 0000000..7f2a104 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru.cfg new file mode 100644 index 0000000..2cde91b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru2.cfg new file mode 100644 index 0000000..d3060fd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b068c90 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/801/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du.xml index 8068127..55797a5 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru.xml index 8068127..82331de 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_du.dat index 2690868..0bfb644 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -54,7 +53,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_ru.dat index d206ca9..26cbab7 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -55,7 +54,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_100mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..f095dbd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 4,5,6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..136c282 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..9fb6dac --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..4ef1b13 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..82086ed --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..041ed8c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_du.dat new file mode 100644 index 0000000..6cc28a4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_du.dat @@ -0,0 +1,162 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC11 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=400 #in us +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=160 #in us +Ta3_max=256 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=480 +T1a_max_cp_ul=560 + +#U-plane +##Transmission Window +T1a_min_up=280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=360 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_ru.dat new file mode 100644 index 0000000..a63982a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/config_file_o_ru.dat @@ -0,0 +1,161 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=6 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing +ttiPeriod=500 # in us TTI period (30Khz default 500us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu1_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu1_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu1_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu1_10mhz/ant_3.bin #CC11 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=400 #in us +T2a_max_cp_dl=850 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=400 #in us +T2a_max_cp_ul=850 #in us + +#Reception Window U-plane +T2a_min_up=200 # in us +T2a_max_up=800 # in us + +#Transmission Window +Ta3_min=160 #in us +Ta3_max=256 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=560 +T1a_max_cp_dl=800 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=480 +T1a_max_cp_ul=560 + +#U-plane +##Transmission Window +T1a_min_up=280 +T1a_max_up=400 + +#Reception Window +Ta4_min=0 +Ta4_max=360 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du.cfg new file mode 100644 index 0000000..fed94ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..f31d8c0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..24dc614 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..71fed3d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..4a996be --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..29f4d6c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_10mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..64152ef --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 8,40,9,41,10,42,11,43 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 500, 500, 500, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1b67bce --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 500, 500, 500, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..11374c5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 500, 500, 500, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_du.dat new file mode 100644 index 0000000..cdb5005 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_du.dat @@ -0,0 +1,141 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=3 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC3 +antC17=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC3 +antC18=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC3 +antC19=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC3 +antC20=./usecase/cat_a/mu0_20mhz/ant_0.bin #CC3 +antC21=./usecase/cat_a/mu0_20mhz/ant_1.bin #CC3 +antC22=./usecase/cat_a/mu0_20mhz/ant_2.bin #CC3 +antC23=./usecase/cat_a/mu0_20mhz/ant_3.bin #CC3 + + + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=19 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,106,0,14,0,1,1,9,1 +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,106,0,14,0,1,1,9,1 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=50 #71 + 25 us +T1a_max_up=75 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=70 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_ru.dat new file mode 100644 index 0000000..8382768 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu0_config_file_o_ru.dat @@ -0,0 +1,170 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=3 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:00:20 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:21 # O-RU VF for O-RU app +duMac1=00:11:22:33:00:30 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:31 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC3 +antC17=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC3 +antC18=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC3 +antC19=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC3 +antC20=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC3 +antC21=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC3 +antC22=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC3 +antC23=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC4=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC5=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC6=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC7=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC8=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC9=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC10=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC11=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC12=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC13=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC14=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC15=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC16=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC17=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC18=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC19=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC20=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC21=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC22=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC23=./usecase/cat_a/mu1_20mhz/ant_3.bin + + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=19 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,106,0,14,0,1,1,9,1 +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,106,0,14,0,1,1,9,1 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=50 #71 + 25 us +T1a_max_up=75 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=70 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_du.dat new file mode 100644 index 0000000..d818255 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_du.dat @@ -0,0 +1,146 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=3 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC5 + + + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=19 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,51,0,14,1,1,1,9,1,0,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,51,0,14,1,1,1,9,1,0,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=50 #71 + 25 us +T1a_max_up=75 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=70 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_ru.dat new file mode 100644 index 0000000..bc16ddf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/mu1_config_file_o_ru.dat @@ -0,0 +1,170 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=3 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu1_20mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu1_20mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu1_20mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu1_20mhz/ant_3.bin #CC5 + +antPrachC0=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC4=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC5=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC6=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC7=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC8=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC9=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC10=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC11=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC12=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC13=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC14=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC15=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC16=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC17=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC18=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC19=./usecase/cat_a/mu1_20mhz/ant_3.bin +antPrachC20=./usecase/cat_a/mu1_20mhz/ant_0.bin +antPrachC21=./usecase/cat_a/mu1_20mhz/ant_1.bin +antPrachC22=./usecase/cat_a/mu1_20mhz/ant_2.bin +antPrachC23=./usecase/cat_a/mu1_20mhz/ant_3.bin + + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=19 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,51,0,14,1,1,1,9,1,0,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,51,0,14,1,1,1,9,1,0,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=50 #71 + 25 us +T1a_max_up=75 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=70 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du.cfg new file mode 100644 index 0000000..5addcb8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du.cfg @@ -0,0 +1,45 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU0 +oXuCfgFile1=./mu0_config_file_o_du.dat #O-DU1 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..21c0270 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du2.cfg @@ -0,0 +1,46 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU0 +oXuCfgFile1=./mu0_config_file_o_du.dat #O-DU1 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..51772a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,46 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU0 +oXuCfgFile1=./mu0_config_file_o_du.dat #O-DU1 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..65e4228 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru.cfg @@ -0,0 +1,37 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=12 # core id +ioWorker=0x2000 # mask [0- no workers] + +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./mu0_config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..3e976d6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru2.cfg @@ -0,0 +1,39 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./mu0_config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 diff --git a/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..62ee93c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_20mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,39 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +dpdkMemorySize=10240 +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./mu0_config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..d5a0287 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..e6d37cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..fb10822 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..f4c6eb8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..129ce72 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..20f681f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_du.dat new file mode 100644 index 0000000..f46f482 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_du.dat @@ -0,0 +1,151 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_60mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_60mhz/ant_3.bin #CC0 +#antC2=./usecase/cat_a/mu1_60mhz/ant_0.bin #CC0 +#antC3=./usecase/cat_a/mu1_60mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_60mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_60mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_60mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_60mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_60mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_60mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_60mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_60mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_60mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_60mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_60mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_60mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,162,0,14,0,0,0,16,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,162,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_ru.dat new file mode 100644 index 0000000..cc47c2f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/config_file_o_ru.dat @@ -0,0 +1,150 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_60mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_60mhz/ant_3.bin #CC0 +#antC2=./usecase/cat_a/mu1_60mhz/ant_0.bin #CC0 +#antC3=./usecase/cat_a/mu1_60mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_60mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_60mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_60mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_60mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_60mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_60mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_60mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_60mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_60mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_60mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_60mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_60mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,162,0,14,0,0,0,16,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,162,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du.cfg new file mode 100644 index 0000000..9ed1cab --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..28b209e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..df3f2f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..e63791a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..5a7df08 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b21c4c0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_60mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..d5a0287 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..e6d37cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..fb10822 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..f4c6eb8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..129ce72 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..20f681f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_du.dat new file mode 100644 index 0000000..cb5f93e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_du.dat @@ -0,0 +1,151 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_60mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_60mhz/ant_3.bin #CC0 +#antC2=./usecase/cat_a/mu1_60mhz/ant_0.bin #CC0 +#antC3=./usecase/cat_a/mu1_60mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_60mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_60mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_60mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_60mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_60mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_60mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_60mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_60mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_60mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_60mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_60mhz/ant_14.bin #CC3 +#antC15=./usecase/cat_a/mu1_60mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,217,0,14,0,0,0,16,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,217,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_ru.dat new file mode 100644 index 0000000..0e0dc79 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/config_file_o_ru.dat @@ -0,0 +1,150 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=80 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=80 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-4] DDDSU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +#duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +#ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +#duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +#duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +#ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_80mhz/ant_2.bin #CC0 +antC1=./usecase/cat_a/mu1_80mhz/ant_3.bin #CC0 +#antC2=./usecase/cat_a/mu1_80mhz/ant_0.bin #CC0 +#antC3=./usecase/cat_a/mu1_80mhz/ant_1.bin #CC0 +#antC4=./usecase/cat_a/mu1_80mhz/ant_4.bin #CC1 +#antC5=./usecase/cat_a/mu1_80mhz/ant_5.bin #CC1 +#antC6=./usecase/cat_a/mu1_80mhz/ant_6.bin #CC1 +#antC7=./usecase/cat_a/mu1_80mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_a/mu1_80mhz/ant_8.bin #CC2 +#antC9=./usecase/cat_a/mu1_80mhz/ant_9.bin #CC2 +#antC10=./usecase/cat_a/mu1_80mhz/ant_10.bin #CC2 +#antC11=./usecase/cat_a/mu1_80mhz/ant_11.bin #CC2 +#antC12=./usecase/cat_a/mu1_80mhz/ant_12.bin #CC3 +#antC13=./usecase/cat_a/mu1_80mhz/ant_13.bin #CC3 +#antC14=./usecase/cat_a/mu1_80mhz/ant_14.bin #CC3 +.#antC15=./usecase/cat_a/mu1_80mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=147 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,217,0,14,0,0,0,16,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,217,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=125 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=419 # 285.42us +T2a_max_cp_dl=470 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=336 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=470 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=336 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_min=50 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du.cfg new file mode 100644 index 0000000..9ed1cab --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..28b209e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..df3f2f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# #remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +#remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +#remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..e63791a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..5a7df08 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b21c4c0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu1_80mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem1Mac2=00:11:22:33:00:20 +oXuRem1Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_du.dat index ef9505a..cd6ddfd 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -70,7 +69,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -117,8 +115,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_ru.dat index f0e0194..81c247f 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -70,7 +69,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -134,8 +132,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_du.dat index eceea0d..d238779 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -98,8 +96,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_ru.dat index 2cca1d6..213ad8c 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -116,8 +114,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/101/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_du.dat index 9677848..feea8cc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -72,7 +71,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,8 +120,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_ru.dat index 8e405a2..f38b0f0 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -72,7 +71,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -136,8 +134,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/2/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_du.dat new file mode 100644 index 0000000..a7dea73 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_du.dat @@ -0,0 +1,174 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=159 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,273,0,14,0,0,0,16,0 +PrbElemDl1=36,36,0,14,2,1,0,16,1 +PrbElemDl2=72,36,0,14,3,1,0,16,1 +PrbElemDl3=108,36,0,14,4,1,0,16,1 +PrbElemDl4=144,36,0,14,5,1,0,16,1 +PrbElemDl5=180,36,0,14,6,1,0,16,1 +PrbElemDl6=216,36,0,14,7,1,0,16,1 +PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,136,0,14,0,0,0,16,0 +PrbElemUl1=136,137,0,14,0,0,0,16,0 +PrbElemUl2=72,36,0,14,3,1,0,16,1 +PrbElemUl3=108,36,0,14,4,1,0,16,1 +PrbElemUl4=144,36,0,14,5,1,0,16,1 +PrbElemUl5=180,36,0,14,6,1,0,16,1 +PrbElemUl6=216,36,0,14,7,1,0,16,1 +PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_ru.dat new file mode 100644 index 0000000..cf44192 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu1_config_file_o_ru.dat @@ -0,0 +1,189 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu1_100mhz/ant_8.bin #CC2 +antPrachC9=./usecase/cat_a/mu1_100mhz/ant_9.bin #CC2 +antPrachC10=./usecase/cat_a/mu1_100mhz/ant_10.bin #CC2 +antPrachC11=./usecase/cat_a/mu1_100mhz/ant_11.bin #CC2 +antPrachC12=./usecase/cat_a/mu1_100mhz/ant_12.bin #CC3 +antPrachC13=./usecase/cat_a/mu1_100mhz/ant_13.bin #CC3 +antPrachC14=./usecase/cat_a/mu1_100mhz/ant_14.bin #CC3 +antPrachC15=./usecase/cat_a/mu1_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=159 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,273,0,14,0,0,0,16,0 +PrbElemDl1=36,36,0,14,2,1,0,16,1 +PrbElemDl2=72,36,0,14,3,1,0,16,1 +PrbElemDl3=108,36,0,14,4,1,0,16,1 +PrbElemDl4=144,36,0,14,5,1,0,16,1 +PrbElemDl5=180,36,0,14,6,1,0,16,1 +PrbElemDl6=216,36,0,14,7,1,0,16,1 +PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,136,0,14,0,0,0,16,0 +PrbElemUl1=136,137,0,14,0,0,0,16,0 +PrbElemUl2=72,36,0,14,3,1,0,16,1 +PrbElemUl3=108,36,0,14,4,1,0,16,1 +PrbElemUl4=144,36,0,14,5,1,0,16,1 +PrbElemUl5=180,36,0,14,6,1,0,16,1 +PrbElemUl6=216,36,0,14,7,1,0,16,1 +PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=392 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=392 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_du.dat new file mode 100644 index 0000000..0da3f3d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_du.dat @@ -0,0 +1,173 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +# not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,36,0,14,1,1,0,16,1 +PrbElemDl1=36,36,0,14,2,1,0,16,1 +PrbElemDl2=72,36,0,14,3,1,0,16,1 +PrbElemDl3=108,36,0,14,4,1,0,16,1 +PrbElemDl4=144,36,0,14,5,1,0,16,1 +PrbElemDl5=180,36,0,14,6,1,0,16,1 +PrbElemDl6=216,36,0,14,7,1,0,16,1 +PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,36,0,14,1,1,0,16,1 +PrbElemUl1=36,36,0,14,2,1,0,16,1 +PrbElemUl2=72,36,0,14,3,1,0,16,1 +PrbElemUl3=108,36,0,14,4,1,0,16,1 +PrbElemUl4=144,36,0,14,5,1,0,16,1 +PrbElemUl5=180,36,0,14,6,1,0,16,1 +PrbElemUl6=216,36,0,14,7,1,0,16,1 +PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=70 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_ru.dat new file mode 100644 index 0000000..f1bd22a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/mu3_config_file_o_ru.dat @@ -0,0 +1,190 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + #not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antPrachC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antPrachC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antPrachC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antPrachC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antPrachC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antPrachC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antPrachC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,36,0,14,1,1,0,16,1 +PrbElemDl1=36,36,0,14,2,1,0,16,1 +PrbElemDl2=72,36,0,14,3,1,0,16,1 +PrbElemDl3=108,36,0,14,4,1,0,16,1 +PrbElemDl4=144,36,0,14,5,1,0,16,1 +PrbElemDl5=180,36,0,14,6,1,0,16,1 +PrbElemDl6=216,36,0,14,7,1,0,16,1 +PrbElemDl7=252,21,0,14,8,1,0,16,1 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,36,0,14,1,1,0,16,1 +PrbElemUl1=36,36,0,14,2,1,0,16,1 +PrbElemUl2=72,36,0,14,3,1,0,16,1 +PrbElemUl3=108,36,0,14,4,1,0,16,1 +PrbElemUl4=144,36,0,14,5,1,0,16,1 +PrbElemUl5=180,36,0,14,6,1,0,16,1 +PrbElemUl6=216,36,0,14,7,1,0,16,1 +PrbElemUl7=252,21,0,14,8,1,0,16,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=70 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du.cfg new file mode 100644 index 0000000..3f3af77 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_du.dat #O-DU0 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du2.cfg new file mode 100644 index 0000000..ba2abb0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_du.dat #O-DU0 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du_icx2.cfg new file mode 100644 index 0000000..ba2abb0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_du.dat #O-DU0 +oXuCfgFile0=./mu1_config_file_o_du.dat #O-DU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru.cfg new file mode 100644 index 0000000..21243f3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_ru.dat #O-RU0 +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru2.cfg new file mode 100644 index 0000000..42f2eb6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_ru.dat #O-RU0 +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru_icx2.cfg new file mode 100644 index 0000000..cb30a45 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/201/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile1=./mu3_config_file_o_ru.dat #O-RU0 +oXuCfgFile0=./mu1_config_file_o_ru.dat #O-RU1 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_du.dat index 9fd7310..ddb0004 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -73,7 +72,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,8 +120,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_ru.dat index f929cd6..34a18fa 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -73,7 +72,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -142,8 +140,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/3/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_du.dat index 21f2798..1620b9e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=1500 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -123,8 +121,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_ru.dat index 7164ae8..7276ec0 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=1500 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -143,8 +141,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/4/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_du.dat index 4fcd733..19d73f1 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=1500 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,8 +120,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_ru.dat index 5010c62..058f3c6 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=1500 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -143,8 +141,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/5/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_du.dat index 85ac998..3d9db8b 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=9600 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioWorker=0x2000000 # mask [0- no workers] # Eth 0 @@ -127,8 +125,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_ru.dat index db85643..67ddf36 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -74,7 +73,6 @@ MTUSize=9600 Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -143,8 +141,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du.cfg index 5c067f4..82f201e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru.cfg index 1ab0180..03c6fdc 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/6/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_du.dat index 134da87..e175e1a 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_du.dat @@ -18,12 +18,21 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + ####################################################################### #Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used @@ -41,16 +50,6 @@ PrbElemUl0=0,33,0,14,1,1,1,12,1 PrbElemUl1=33,33,0,14,2,1,1,12,1 ####################################################################### -##Numerology -mu=3 #mmWave 120Khz Sub Carrier Spacing -ttiPeriod=125 # in us TTI period (mmWave default 125us) -nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 -nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 -nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 -nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 -nDLFftSize=1024 -nULFftSize=1024 - nFrameDuplexType=1 # 0 - FDD 1 - TDD nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD @@ -70,7 +69,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -118,8 +116,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_ru.dat index 0cc2c01..bf185a2 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/config_file_o_ru.dat @@ -18,12 +18,21 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + ####################################################################### #Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used @@ -41,16 +50,6 @@ PrbElemUl0=0,33,0,14,1,1,1,12,1 PrbElemUl1=33,33,0,14,2,1,1,12,1 ####################################################################### -##Numerology -mu=3 #mmWave 120Khz Sub Carrier Spacing -ttiPeriod=125 # in us TTI period (mmWave default 125us) -nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 -nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 -nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 -nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 -nDLFftSize=1024 -nULFftSize=1024 - nFrameDuplexType=1 # 0 - FDD 1 - TDD nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD @@ -70,7 +69,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -134,8 +132,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du2.cfg new file mode 100644 index 0000000..9140b3a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du_icx2.cfg new file mode 100644 index 0000000..f1fcbad --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/7/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_du.dat new file mode 100644 index 0000000..8dfd3bb --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_du.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +####################################################################### +#Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,22,0,14,0,1,1,14,1 +PrbElemDl1=22,22,0,14,1,1,1,14,1 +PrbElemDl2=44,22,0,14,2,1,1,14,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,22,0,14,0,1,1,14,1 +PrbElemUl1=22,22,0,14,1,1,1,14,1 +PrbElemUl2=44,22,0,14,2,1,1,14,1 +####################################################################### + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +# not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +#3c:fd:fe:b9:f8:b5 +# +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=3c:fd:fe:b9:f8:b5 +#00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +maxFrameId=99 # set for compatibility with O-RU + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=0 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=140 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_ru.dat new file mode 100644 index 0000000..846ef4b --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/config_file_o_ru.dat @@ -0,0 +1,180 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +####################################################################### +#Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,22,0,14,0,1,1,14,1 +PrbElemDl1=22,22,0,14,1,1,1,14,1 +PrbElemDl2=44,22,0,14,2,1,1,14,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,22,0,14,0,1,1,14,1 +PrbElemUl1=22,22,0,14,1,1,1,14,1 +PrbElemUl2=44,22,0,14,2,1,1,14,1 +####################################################################### + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=4 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + #not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +maxFrameId=99 # set for compatibility with O-RU + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +antPrachC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antPrachC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antPrachC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antPrachC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antPrachC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antPrachC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antPrachC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antPrachC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=70 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du.cfg new file mode 100644 index 0000000..82f201e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/8/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_du.dat new file mode 100644 index 0000000..b1abb14 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_du.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +####################################################################### +#Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,66,0,14,0,1,1,9,1 +PrbElemDl1=22,22,0,14,1,1,1,9,1 +PrbElemDl2=44,22,0,14,2,1,1,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,66,0,14,0,1,1,9,1 +PrbElemUl1=22,22,0,14,1,1,1,9,1 +PrbElemUl2=44,22,0,14,2,1,1,9,1 +####################################################################### + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + #not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 +#9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + + +maxFrameId=99 # set for compatibility with O-RU + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=140 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_ru.dat new file mode 100644 index 0000000..3ee293a --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/config_file_o_ru.dat @@ -0,0 +1,187 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +####################################################################### +#Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,66,0,14,0,1,1,9,1 +PrbElemDl1=22,22,0,14,1,1,1,9,1 +PrbElemDl2=44,22,0,14,2,1,1,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,66,0,14,0,1,1,9,1 +PrbElemUl1=22,22,0,14,1,1,1,9,1 +PrbElemUl2=44,22,0,14,2,1,1,9,1 +####################################################################### + +##Numerology +mu=3 #mmWave 120Khz Sub Carrier Spacing +ttiPeriod=125 # in us TTI period (mmWave default 125us) +nDLAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=27968160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-5] TDD priod e.g. DDDS 4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + #not used +#sSlotConfig4=0,2,2,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +#sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 +#9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +maxFrameId=99 # set for compatibility with O-RU + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +#antPrachC0=./usecase/cat_a/mu3_100mhz/uliq00_prach_tst20.bin #CC0 +#antPrachC1=./usecase/cat_a/mu3_100mhz/uliq01_prach_tst20.bin #CC0 +#antPrachC2=./usecase/cat_a/mu3_100mhz/uliq00_prach_tst20.bin #CC0 +#antPrachC3=./usecase/cat_a/mu3_100mhz/uliq01_prach_tst20.bin #CC0 + +antPrachC0=./usecase/cat_a/mu3_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_a/mu3_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_a/mu3_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_a/mu3_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_a/mu3_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_a/mu3_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_a/mu3_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_a/mu3_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_a/mu3_100mhz/ant_8.bin #CC2 +antPrachC9=./usecase/cat_a/mu3_100mhz/ant_9.bin #CC2 +antPrachC10=./usecase/cat_a/mu3_100mhz/ant_10.bin #CC2 +antPrachC11=./usecase/cat_a/mu3_100mhz/ant_11.bin #CC2 +antPrachC12=./usecase/cat_a/mu3_100mhz/ant_12.bin #CC3 +antPrachC13=./usecase/cat_a/mu3_100mhz/ant_13.bin #CC3 +antPrachC14=./usecase/cat_a/mu3_100mhz/ant_14.bin #CC3 +antPrachC15=./usecase/cat_a/mu3_100mhz/ant_15.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=81 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=50 #in us +T2a_max_cp_dl=140 #in us + +#Reception Window C-plane UL +T2a_min_cp_ul=50 #in us +T2a_max_cp_ul=140 #in us + +#Reception Window U-plane +T2a_min_up=25 #in us +T2a_max_up=70 #in us + +#Transmission Window +Ta3_min=20 #in us +Ta3_max=32 #in us + +########################################################### +##lls-CU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=70 +T1a_max_cp_dl=100 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=60 +T1a_max_cp_ul=70 + +#U-plane +##Transmission Window +T1a_min_up=35 +T1a_max_up=50 + +#Reception Window +Ta4_min=0 +Ta4_max=45 +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du.cfg new file mode 100644 index 0000000..82f201e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/9/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du.xml index aad7283..6874bed 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..608e006 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 125, 125, 125, 125 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3b7d434 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 125, 125, 125, 125 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru.xml index 8068127..08fde7e 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 1,1,1,1 - 500, 500, 500, 500 + 125, 125, 125, 125 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..f64c146 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 125, 125, 125, 125 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..4583122 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 125, 125, 125, 125 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_du.dat index 983cfec..26c30ba 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # lls-CU(0) | RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -99,8 +97,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_ru.dat index fdeb91e..09d9af8 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) @@ -53,7 +52,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -116,8 +114,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru2.cfg new file mode 100644 index 0000000..5af0933 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] //24 + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/cat_a/mu3_100mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..f1f53c8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 16 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..17c3899 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 16 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..e7ae033 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..f7f7dc3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76,21,77,22,78,23,79,24,80,25,81,26,82,27,83 + + 2 + + 0,1,1,1 + + 1000, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du0.dat b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du0.dat new file mode 100644 index 0000000..64b83ce --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du0.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +appMode=0 # lls-CU(0) | RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioCore=5 +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC11 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=0 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 #in us TODO: update per RU implementation + #C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages + +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du1.dat b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du1.dat new file mode 100755 index 0000000..6f4eccf --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_du1.dat @@ -0,0 +1,245 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru0.dat b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru0.dat new file mode 100644 index 0000000..c01fd4c --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru0.dat @@ -0,0 +1,217 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +appMode=1 # O-DU(0) | O-RU(1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioCore=10 +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files + +antC0=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC0 +antC4=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC1 +antC5=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC1 +antC6=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC1 +antC7=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC1 +antC8=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC2 +antC9=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC2 +antC10=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC2 +antC11=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC2 +antC12=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC3 +antC13=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC3 +antC14=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC3 +antC15=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC3 +antC16=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC4 +antC17=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC4 +antC18=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC4 +antC19=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC4 +antC20=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC5 +antC21=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC5 +antC22=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC5 +antC23=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC5 +antC24=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC6 +antC25=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC6 +antC26=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC6 +antC27=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC6 +antC28=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC7 +antC29=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC7 +antC30=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC7 +antC31=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC7 +antC32=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC8 +antC33=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC8 +antC34=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC8 +antC35=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC8 +antC36=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC9 +antC37=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC9 +antC38=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC9 +antC39=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC9 +antC40=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC10 +antC41=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC10 +antC42=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC10 +antC43=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC10 +antC44=./usecase/cat_a/mu0_10mhz/ant_0.bin #CC11 +antC45=./usecase/cat_a/mu0_10mhz/ant_1.bin #CC11 +antC46=./usecase/cat_a/mu0_10mhz/ant_2.bin #CC11 +antC47=./usecase/cat_a/mu0_10mhz/ant_3.bin #CC11 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +antPrachC0=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC1=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC2=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC3=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC4=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC5=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC6=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC7=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC8=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC9=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC10=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC11=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC12=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC13=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC14=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC15=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC16=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC17=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC18=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC19=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC20=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC21=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC22=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC23=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC24=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC25=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC26=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC27=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC28=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC29=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC30=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC31=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC32=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC33=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC34=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC35=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC36=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC37=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC38=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC39=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC40=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC41=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC42=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC43=./usecase/cat_a/mu0_10mhz/ant_3.bin +antPrachC44=./usecase/cat_a/mu0_10mhz/ant_0.bin +antPrachC45=./usecase/cat_a/mu0_10mhz/ant_1.bin +antPrachC46=./usecase/cat_a/mu0_10mhz/ant_2.bin +antPrachC47=./usecase/cat_a/mu0_10mhz/ant_3.bin + + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=0 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru1.dat b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru1.dat new file mode 100755 index 0000000..a0aeb6f --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/config_file_o_ru1.dat @@ -0,0 +1,295 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_du.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_du.cfg new file mode 100644 index 0000000..0ee6182 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_du.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=1 +ioCore=18 # core id +# ioWorker=0x600 # mask [0- no workers] +ioWorker=0x0000000000080000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du0.dat #O-DU0 +oXuCfgFile1=./config_file_o_du1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_du2.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_du2.cfg new file mode 100644 index 0000000..2dad2d2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +# ioWorker=0x30 # mask [0- no workers] +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du0.dat #O-DU0 +oXuCfgFile1=./config_file_o_du1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx.cfg new file mode 100644 index 0000000..b5ca6d4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=7 # core id +# ioWorker=0x600 # mask [0- no workers] +ioWorker=0x700 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du0.dat #O-DU0 +oXuCfgFile1=./config_file_o_du1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx2.cfg new file mode 100644 index 0000000..82e3e39 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +# ioWorker=0x600 # mask [0- no workers] +ioWorker=0x70 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du0.dat #O-DU0 +oXuCfgFile1=./config_file_o_du1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_ru.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru.cfg new file mode 100644 index 0000000..1aad6aa --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +# ioWorker=0xC00 # second socket +ioWorker=0x000000F800000000 # +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru2.cfg new file mode 100644 index 0000000..99a4bf6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +# ioWorker=0xC00 # second socket +ioWorker=0xF800000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_a_b/201/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru_icx2.cfg new file mode 100644 index 0000000..3770997 --- /dev/null +++ b/fhi_lib/app/usecase/cat_a_b/201/usecase_ru_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +# ioWorker=0xC00 # second socket +ioWorker=0x1F00000000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru0.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_du.dat index ad4f9e2..f6c758a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -62,8 +61,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask 0-no workers # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -199,39 +196,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_ru.dat index 35378b1..f717f8a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -62,7 +61,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -205,39 +203,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_du.dat index 49f7f39..2fb088d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD 1 8T8R 100 4 2 MAX MAX 33% 33% 4.25 1.725 0% DU # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,25 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask 0-no workers - -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/64qam_ant_0.bin #CC0 @@ -127,13 +112,13 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,4095 -PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,4095 +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,0xfff +PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,0xfff # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth ExtBfwDl0=32,2,0,0,9,1 @@ -141,7 +126,7 @@ ExtBfwDl1=13,2,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights @@ -172,39 +157,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_ru.dat index f6c147f..60071c4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/config_file_o_ru.dat @@ -19,16 +19,15 @@ #TDD 1 8T8R 100 4 2 MAX MAX 33% 33% 4.25 1.725 0% DU # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,26 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # core id -ioWorker=0x800000000 # mask 0-no workers - -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app - numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 @@ -122,55 +106,55 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,4095 -PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,4095 +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,0xfff +PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,0xfff nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 @@ -197,39 +181,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/101/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_du.dat index eb40204..de48da5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD 1 8T8R 100 4 2 MAX 16QAM 0.5 33% 90 33% 90 4.25 1.15 0% DU # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,26 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] - -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app - numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/16qam_ant_0.bin #CC0 antC1=./usecase/cat_b/mu1_100mhz/16qam_ant_1.bin #CC0 @@ -127,13 +111,13 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,4095 -PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,4095 +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,0xfff +PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,0xfff # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth ExtBfwDl0=32,2,0,0,9,1 @@ -141,7 +125,7 @@ ExtBfwDl1=13,2,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights @@ -172,39 +156,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_ru.dat index eee7051..a52f59a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/config_file_o_ru.dat @@ -19,16 +19,15 @@ #TDD 1 8T8R 100 4 2 MAX 16QAM 0.5 33% 90 33% 90 4.25 1.15 0% DU # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,25 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # core id - -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app - numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 @@ -121,52 +106,52 @@ srsSlot=3 # scheduled srs slot within tdd period srsNdmOffset=3 # delay offset to start ndm srs u-plane srsNdmTxDuration=4 # tx duration for ndm srts u-plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,4095 -PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,4095 +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,0xfff +PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,0xfff nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 @@ -193,39 +178,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/102/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_du.dat index b8c47b4..c46d094 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,26 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] - -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app - numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/qpsk_ant_0.bin #CC0 antC1=./usecase/cat_b/mu1_100mhz/qpsk_ant_1.bin #CC0 @@ -130,13 +114,13 @@ srsNdmTxDuration=4 # tx duration for ndm srts u-plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,4095 -PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,4095 +# weight base beams +PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,0xfff +PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,0xfff # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth ExtBfwDl0=30,3,0,0,9,1 @@ -144,7 +128,7 @@ ExtBfwDl1=30,3,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights @@ -175,39 +159,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_ru.dat index b4b192c..05a51be 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,24 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 -# Eth 0 -duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app -duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF -ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app - -# Eth 1 -duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app -duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF -ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app - numSlots=20 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 @@ -121,55 +107,55 @@ srsSlot=3 # scheduled srs slot within tdd period srsNdmOffset=3 # delay offset to start ndm srs u-plane srsNdmTxDuration=4 # tx duration for ndm srts u-plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #66% 180 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -nPrbElemDl=2 +nPrbElemDl=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask -# weight base beams -PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,4095 -PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,4095 +# weight base beams +PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,0xfff +PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,0xfff nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,64,0,14,0,1,1,9,1 PrbElemUl1=64,26,0,14,1,1,1,9,1 @@ -196,39 +182,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=390 # 285.42us +T2a_max_cp_dl=971 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=259 # 285.42us +T2a_max_cp_ul=840 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=240 # 71.35in us +T2a_max_up=475 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=280 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=550 +T1a_max_cp_dl=971 ##Transmission Window Fast C-plane UL -T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_min_cp_ul=419 +T1a_max_cp_ul=840 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=400 #71 + 25 us +T1a_max_up=475 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=440 # in us +Ta4_max=440 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/103/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_du.dat index e844024..3485333 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -146,11 +143,11 @@ srsNdmTxDuration=4 # tx duration for ndm srts u-plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -162,7 +159,7 @@ ExtBfwDl2=10,3,0,0,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -195,39 +192,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_ru.dat index cf3f7a8..fdff129 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,88 +119,88 @@ srsSlot=3 # scheduled srs slot within tdd period srsNdmOffset=3 # delay offset to start ndm srs u-plane srsNdmTxDuration=4 # tx duration for ndm srts u-plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -230,39 +228,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/104/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_du.dat index 58e5ff4..cb8af97 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_du.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,13 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -149,11 +146,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -165,7 +162,7 @@ ExtBfwDl2=10,3,0,0,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -198,39 +195,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_ru.dat index 34f3a00..04644e2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,87 +119,87 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -229,39 +227,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/105/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..e3df9e9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 7 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..5ef62b5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..54d71d2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2afe236 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_du.dat index bb7572f..7161a5b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_du.dat @@ -21,7 +21,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -65,8 +64,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -204,39 +201,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_ru.dat index 03ced3b..b7de7d2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/config_file_o_ru.dat @@ -21,7 +21,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -65,7 +64,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -234,39 +232,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du.cfg index 9f52c58..fd587e0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du.cfg @@ -18,13 +18,16 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] -oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./config_file_o_du.dat #O-RU0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du2.cfg new file mode 100644 index 0000000..3ae1643 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx.cfg new file mode 100644 index 0000000..27241b1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx2.cfg new file mode 100644 index 0000000..4707ff7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru.cfg index 1ab0180..eac5348 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru.cfg @@ -18,13 +18,18 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] + +mainCore=19 #core for main() +systemCore=20 +ioCore=21 # core id +ioWorker=0x7C00000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./config_file_o_ru.dat #O-RU0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru2.cfg new file mode 100644 index 0000000..ffeeb4d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c000d5c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/106/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_du.dat index 0b650c9..b2fc440 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD 1 64T64R 100 8 4 MAX MAX 33% 90 33% 90 8.5 3.45 0% DU # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,13 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -138,11 +135,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -154,7 +151,7 @@ ExtBfwDl2=10,3,0,0,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -187,39 +184,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_ru.dat index b8e3325..fedfa4e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,87 +119,87 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -229,39 +227,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/107/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_du.dat index d17ca2e..3197192 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD 1 64T64R 100 8 4 MAX 16QAM 0.5 33% 90 33% 90 8.5 2.3 DU # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,13 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -135,11 +132,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -151,7 +148,7 @@ ExtBfwDl2=10,3,0,0,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -184,39 +181,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_ru.dat index 46a6d86..151e1de 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,87 +119,87 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -229,39 +227,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/108/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_du.dat index 18ced63..016e7f2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_du.dat @@ -16,19 +16,18 @@ # #******************************************************************************/ -#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% +#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,13 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -135,11 +132,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -157,7 +154,7 @@ ExtBfwDl5=10,3,0,0,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -190,39 +187,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_ru.dat index c0ae2c5..cfad929 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/config_file_o_ru.dat @@ -16,20 +16,19 @@ # #******************************************************************************/ -#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% +#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,78 +119,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,30,0,14,0,1,1,9,1 PrbElemDl1=30,30,0,14,1,1,1,9,1 PrbElemDl2=60,30,0,14,2,1,1,9,1 @@ -202,7 +200,7 @@ PrbElemDl5=150,30,0,14,5,1,1,9,1 nPrbElemUl=3 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,30,0,14,0,1,1,9,1 PrbElemUl1=30,30,0,14,1,1,1,9,1 PrbElemUl2=60,30,0,14,2,1,1,9,1 @@ -230,39 +228,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/109/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_du.dat new file mode 100644 index 0000000..7fd851b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_du.dat @@ -0,0 +1,207 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 MAX MAX 33% 33% 4.25 1.725 0% DU + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/64qam_ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/64qam_ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/64qam_ant_0.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/64qam_ant_1.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,0xfff +PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,0xfff +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=32,2,0,0,9,1 +ExtBfwDl1=13,2,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=64,2,0,0,9,1 +ExtBfwUl1=13,2,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_ru.dat new file mode 100644 index 0000000..a985a11 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/config_file_o_ru.dat @@ -0,0 +1,232 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 MAX MAX 33% 33% 4.25 1.725 0% DU + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,3,1,5064,0xfff +PrbElemDl1=64,26,0,14,1,1,4,3,1,5064,0xfff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du.cfg new file mode 100644 index 0000000..07e0e58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru.cfg new file mode 100644 index 0000000..161fa4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/111/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_du.dat new file mode 100644 index 0000000..bfdfed5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_du.dat @@ -0,0 +1,207 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 MAX 16QAM 0.5 33% 90 33% 90 4.25 1.15 0% DU + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/16qam_ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/16qam_ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/16qam_ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/16qam_ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,0xfff +PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,0xfff +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=32,2,0,0,9,1 +ExtBfwDl1=13,2,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=64,2,0,0,9,1 +ExtBfwUl1=13,2,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_ru.dat new file mode 100644 index 0000000..f3a9003 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/config_file_o_ru.dat @@ -0,0 +1,229 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 MAX 16QAM 0.5 33% 90 33% 90 4.25 1.15 0% DU + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,64,0,14,0,1,4,2,1,10360,0xfff +PrbElemDl1=64,26,0,14,1,1,4,2,1,10360,0xfff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/112/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_du.dat new file mode 100644 index 0000000..82eca49 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_du.dat @@ -0,0 +1,211 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 64QAM 0.5 16QAM 0.5 66% 180 33% 90 3.425 1.15 DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/qpsk_ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/qpsk_ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/qpsk_ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/qpsk_ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,0xfff +PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,0xfff +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=30,3,0,0,9,1 +ExtBfwDl1=30,3,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=30,3,0,0,9,1 +ExtBfwUl1=30,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_ru.dat new file mode 100644 index 0000000..729ae05 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/config_file_o_ru.dat @@ -0,0 +1,232 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 64QAM 0.5 16QAM 0.5 66% 180 33% 90 3.425 1.15 DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType, Scalefactor, REMask +# weight base beams +PrbElemDl0=0,90,0,14,0,1,4,1,1,8192,0xfff +PrbElemDl1=90,90,0,14,1,1,4,1,1,8192,0xfff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,26,0,14,1,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/113/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_du.dat new file mode 100644 index 0000000..de88d9a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_du.dat @@ -0,0 +1,231 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 16 8 MAX MAX 33% 90 33% 90 17 6.9 0% DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_ru.dat new file mode 100644 index 0000000..a751ce4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/config_file_o_ru.dat @@ -0,0 +1,266 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 8T8R 100 4 2 64QAM 0.5 16QAM 0.5 66% 180 33% 90 3.425 1.15 DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/114/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_du.dat new file mode 100644 index 0000000..ff4e7cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_du.dat @@ -0,0 +1,233 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 16 8 MAX 16QAM 0.5 33% 90 33% 90 17 4.6 DU + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_ru.dat new file mode 100644 index 0000000..d6a0101 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/config_file_o_ru.dat @@ -0,0 +1,265 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 16 8 MAX 16QAM 0.5 33% 90 33% 90 17 4.6 DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/115/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_du.dat new file mode 100644 index 0000000..413a81b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_du.dat @@ -0,0 +1,239 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 16 8 64QAM 0.5 16QAM 0.5 66% 180 33% 90 13.7 4.6 0% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +PrbElemDl3=90,30,0,14,3,1,1,9,1 +PrbElemDl4=120,30,0,14,4,1,1,9,1 +PrbElemDl5=150,30,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 +ExtBfwDl3=10,3,0,0,9,1 +ExtBfwDl4=10,3,0,0,9,1 +ExtBfwDl5=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_ru.dat new file mode 100644 index 0000000..6b1218a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/config_file_o_ru.dat @@ -0,0 +1,270 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 16 8 64QAM 0.5 16QAM 0.5 66% 180 33% 90 13.7 4.6 0% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +PrbElemDl3=90,30,0,14,3,1,1,9,1 +PrbElemDl4=120,30,0,14,4,1,1,9,1 +PrbElemDl5=150,30,0,14,5,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/116/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_du.dat new file mode 100644 index 0000000..a8f9b72 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_du.dat @@ -0,0 +1,222 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 MAX MAX 33% 90 33% 90 8.5 3.45 0% DU + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_ru.dat new file mode 100644 index 0000000..8868619 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/config_file_o_ru.dat @@ -0,0 +1,265 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 MAX MAX 33% 90 33% 90 8.5 3.45 0% DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/117/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_du.dat new file mode 100644 index 0000000..515a0f0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_du.dat @@ -0,0 +1,219 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 MAX 16QAM 0.5 33% 90 33% 90 8.5 2.3 DU + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_ru.dat new file mode 100644 index 0000000..c23512e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/config_file_o_ru.dat @@ -0,0 +1,265 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 MAX 16QAM 0.5 33% 90 33% 90 8.5 2.3 DU + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/118/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_du.dat new file mode 100644 index 0000000..7a8e670 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_du.dat @@ -0,0 +1,225 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +PrbElemDl3=90,30,0,14,3,1,1,9,1 +PrbElemDl4=120,30,0,14,4,1,1,9,1 +PrbElemDl5=150,30,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=10,3,0,0,9,1 +ExtBfwDl1=10,3,0,0,9,1 +ExtBfwDl2=10,3,0,0,9,1 +ExtBfwDl3=10,3,0,0,9,1 +ExtBfwDl4=10,3,0,0,9,1 +ExtBfwDl5=10,3,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=10,3,0,0,9,1 +ExtBfwUl1=10,3,0,0,9,1 +ExtBfwUl2=10,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_ru.dat new file mode 100644 index 0000000..0677873 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/config_file_o_ru.dat @@ -0,0 +1,266 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD 1 64T64R 100 8 4 64QAM 0.5 16QAM 0.5 66% 180 33% 90 6.85 2.3 0% + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,30,0,14,0,1,1,9,1 +PrbElemDl1=30,30,0,14,1,1,1,9,1 +PrbElemDl2=60,30,0,14,2,1,1,9,1 +PrbElemDl3=90,30,0,14,3,1,1,9,1 +PrbElemDl4=120,30,0,14,4,1,1,9,1 +PrbElemDl5=150,30,0,14,5,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,30,0,14,0,1,1,9,1 +PrbElemUl1=30,30,0,14,1,1,1,9,1 +PrbElemUl2=60,30,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/119/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du.xml index d4b1e56..55797a5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 10 + 6 - 10 + 4 - 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx.xml index 81b0e03..a6167b6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx.xml @@ -43,9 +43,9 @@ 6 - 6 + 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,37,6,38,7,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru.xml index 8068127..133d74e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru.xml @@ -43,11 +43,11 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 - 1 + 3 1,1,1,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..9df6b75 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..ea1897a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_du_tst376.dat new file mode 100755 index 0000000..e6b5a21 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_du_tst376.dat @@ -0,0 +1,257 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_ru_tst376.dat new file mode 100644 index 0000000..9451267 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/peak_o_ru_tst376.dat @@ -0,0 +1,297 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du.cfg index 7f18d32..3cdd093 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du.cfg @@ -20,13 +20,12 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=22 -ioCore=28 # core id -#ioWorker=0x000000000 # mask [0- no workers] -#ioWorker=0x8000040000 # mask [0- no workers] -ioWorker=0x100000000 # mask [0- no workers] + +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] #ioWorker=0x700000600 + + oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml dlCpProcBurst=1 @@ -39,7 +38,10 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du2.cfg new file mode 100644 index 0000000..1ecc504 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du2.cfg @@ -0,0 +1,66 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx.cfg index 54d2c78..dbdae25 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx.cfg @@ -20,10 +20,10 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=8 # core id -ioWorker=0x200 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 iovaMode=0 @@ -34,7 +34,8 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx2.cfg new file mode 100644 index 0000000..bca9b57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru.cfg index 17b6ee1..cb70a9f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru.cfg @@ -20,13 +20,11 @@ #===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id -#ioWorker=0x800000000 # mask [0- no workers] -#ioWorker=0x800004000 # mask [0- no workers] -#ioWorker=0xc000000 # second socket -ioWorker=0x3E00 # second socket +mainCore=11 #core for main() +systemCore=12 +ioCore=13 # core id +ioWorker=0x7C000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=8192 iovaMode=0 @@ -37,7 +35,9 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru2.cfg new file mode 100644 index 0000000..d669b35 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx.cfg index 4ffef94..e7a5b36 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx.cfg @@ -19,12 +19,11 @@ # This is simple configuration file. Use '#' sign for comments #===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id -ioWorker=0x3E00 # mask [0- no workers] -oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx.xml +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E000 # mask [0- no workers] dpdkMemorySize=8192 iovaMode=0 @@ -35,7 +34,7 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c5e27ad --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/142/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx.xml index 8068127..a6167b6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,37,6,38,7,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d38d03b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_du_tst376.dat index 57d20fd..7654dcb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_du_tst376.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -199,39 +198,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_ru_tst376.dat index 1e0f13d..94987a3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -249,39 +248,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du2.cfg new file mode 100644 index 0000000..56bad22 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx.cfg index fe1237b..dbdae25 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx.cfg @@ -20,10 +20,10 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=8 # core id -ioWorker=0x200 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx2.cfg new file mode 100644 index 0000000..bca9b57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru.cfg index 59af749..543686f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru.cfg @@ -26,7 +26,8 @@ ioCore=8 # core id #ioWorker=0x800000000 # mask [0- no workers] #ioWorker=0x800004000 # mask [0- no workers] #ioWorker=0xc000000 # second socket -ioWorker=0x3E00 # second socket +ioWorker=0x200 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru2.cfg new file mode 100644 index 0000000..5b135a1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx.cfg index 853f94f..df37a05 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx.cfg @@ -19,12 +19,11 @@ # This is simple configuration file. Use '#' sign for comments #===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id -ioWorker=0x3E00 # mask [0- no workers] - +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c5e27ad --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1421/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..ba6b83f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39bfd58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..1fc2c87 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 6,38,7,39,8,40,9,41,10,42,11,43 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..7ea71e7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..e5b68d7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c7ea246 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..cf8ce05 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_du.dat new file mode 100755 index 0000000..75b1eb5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_du.dat @@ -0,0 +1,283 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_ru.dat new file mode 100755 index 0000000..600b15c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/config_file_o_ru.dat @@ -0,0 +1,334 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du.cfg new file mode 100644 index 0000000..e6f3deb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=16 # core id +ioWorker=0x0000000000080000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du2.cfg new file mode 100644 index 0000000..e5cb1af --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx.cfg new file mode 100644 index 0000000..085d2ff --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx2.cfg new file mode 100644 index 0000000..b5f8f10 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru.cfg new file mode 100644 index 0000000..4e030c7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +ioWorker=0x000000F800000000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru2.cfg new file mode 100644 index 0000000..a6636d9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx.cfg new file mode 100644 index 0000000..de2056d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7121278 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/152/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..0e6f83c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 14 + + 10 + + 6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..969c2fa --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 14 + + 10 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..232f05d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..7ea71e7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..e5b68d7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c7ea246 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..cf8ce05 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 7 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_du.dat new file mode 100755 index 0000000..9a317f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_du.dat @@ -0,0 +1,348 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=32 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,9,0,14,0,1,1,9,1 +PrbElemDl1=9,9,0,14,1,1,1,9,1 +PrbElemDl2=18,9,0,14,2,1,1,9,1 +PrbElemDl3=27,9,0,14,3,1,1,9,1 +PrbElemDl4=36,9,0,14,4,1,1,9,1 +PrbElemDl5=45,9,0,14,5,1,1,9,1 +PrbElemDl6=54,9,0,14,6,1,1,9,1 +PrbElemDl7=63,9,0,14,7,1,1,9,1 +PrbElemDl8=72,9,0,14,8,1,1,9,1 +PrbElemDl9=81,9,0,14,9,1,1,9,1 +PrbElemDl10=90,9,0,14,10,1,1,9,1 +PrbElemDl11=99,9,0,14,11,1,1,9,1 +PrbElemDl12=108,9,0,14,12,1,1,9,1 +PrbElemDl13=117,9,0,14,13,1,1,9,1 +PrbElemDl14=126,9,0,14,14,1,1,9,1 +PrbElemDl15=135,9,0,14,15,1,1,9,1 +PrbElemDl16=144,9,0,14,16,1,1,9,1 +PrbElemDl17=153,9,0,14,17,1,1,9,1 +PrbElemDl18=162,9,0,14,18,1,1,9,1 +PrbElemDl19=171,9,0,14,19,1,1,9,1 +PrbElemDl20=180,9,0,14,20,1,1,9,1 +PrbElemDl21=189,9,0,14,21,1,1,9,1 +PrbElemDl22=198,9,0,14,22,1,1,9,1 +PrbElemDl23=207,9,0,14,23,1,1,9,1 +PrbElemDl24=216,9,0,14,24,1,1,9,1 +PrbElemDl25=225,9,0,14,25,1,1,9,1 +PrbElemDl26=234,9,0,14,26,1,1,9,1 +PrbElemDl27=245,9,0,14,27,1,1,9,1 +PrbElemDl28=254,9,0,14,28,1,1,9,1 +PrbElemDl29=265,3,0,14,29,1,1,9,1 +PrbElemDl30=268,3,0,14,30,1,1,9,1 +PrbElemDl31=271,2,0,14,31,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=9,1,0,0,16,0,1 +ExtBfwDl1=9,1,0,0,16,0,1 +ExtBfwDl2=9,1,0,0,16,0,1 +ExtBfwDl3=9,1,0,0,16,0,1 +ExtBfwDl4=9,1,0,0,16,0,1 +ExtBfwDl5=9,1,0,0,16,0,1 +ExtBfwDl6=9,1,0,0,16,0,1 +ExtBfwDl7=9,1,0,0,16,0,1 +ExtBfwDl8=9,1,0,0,16,0,1 +ExtBfwDl9=9,1,0,0,16,0,1 +ExtBfwDl10=9,1,0,0,16,0,1 +ExtBfwDl11=9,1,0,0,16,0,1 +ExtBfwDl12=9,1,0,0,16,0,1 +ExtBfwDl13=9,1,0,0,16,0,1 +ExtBfwDl14=9,1,0,0,16,0,1 +ExtBfwDl15=9,1,0,0,16,0,1 +ExtBfwDl16=9,1,0,0,16,0,1 +ExtBfwDl17=9,1,0,0,16,0,1 +ExtBfwDl18=9,1,0,0,16,0,1 +ExtBfwDl19=9,1,0,0,16,0,1 +ExtBfwDl20=9,1,0,0,16,0,1 +ExtBfwDl21=9,1,0,0,16,0,1 +ExtBfwDl22=9,1,0,0,16,0,1 +ExtBfwDl23=9,1,0,0,16,0,1 +ExtBfwDl24=9,1,0,0,16,0,1 +ExtBfwDl25=9,1,0,0,16,0,1 +ExtBfwDl26=9,1,0,0,16,0,1 +ExtBfwDl27=9,1,0,0,16,0,1 +ExtBfwDl28=9,1,0,0,16,0,1 +ExtBfwDl29=3,1,0,0,16,0,1 +ExtBfwDl30=3,1,0,0,16,0,1 +ExtBfwDl31=2,1,0,0,16,0,1 + +nPrbElemUl=32 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,9,0,14,0,1,1,9,1 +PrbElemUl1=9,9,0,14,1,1,1,9,1 +PrbElemUl2=18,9,0,14,2,1,1,9,1 +PrbElemUl3=27,9,0,14,3,1,1,9,1 +PrbElemUl4=36,9,0,14,4,1,1,9,1 +PrbElemUl5=45,9,0,14,5,1,1,9,1 +PrbElemUl6=54,9,0,14,6,1,1,9,1 +PrbElemUl7=63,9,0,14,7,1,1,9,1 +PrbElemUl8=72,9,0,14,8,1,1,9,1 +PrbElemUl9=81,9,0,14,9,1,1,9,1 +PrbElemUl10=90,9,0,14,10,1,1,9,1 +PrbElemUl11=99,9,0,14,11,1,1,9,1 +PrbElemUl12=108,9,0,14,12,1,1,9,1 +PrbElemUl13=117,9,0,14,13,1,1,9,1 +PrbElemUl14=126,9,0,14,14,1,1,9,1 +PrbElemUl15=135,9,0,14,15,1,1,9,1 +PrbElemUl16=144,9,0,14,16,1,1,9,1 +PrbElemUl17=153,9,0,14,17,1,1,9,1 +PrbElemUl18=162,9,0,14,18,1,1,9,1 +PrbElemUl19=171,9,0,14,19,1,1,9,1 +PrbElemUl20=180,9,0,14,20,1,1,9,1 +PrbElemUl21=189,9,0,14,21,1,1,9,1 +PrbElemUl22=198,9,0,14,22,1,1,9,1 +PrbElemUl23=207,9,0,14,23,1,1,9,1 +PrbElemUl24=216,9,0,14,24,1,1,9,1 +PrbElemUl25=225,9,0,14,25,1,1,9,1 +PrbElemUl26=234,9,0,14,26,1,1,9,1 +PrbElemUl27=245,9,0,14,27,1,1,9,1 +PrbElemUl28=254,9,0,14,28,1,1,9,1 +PrbElemUl29=265,3,0,14,29,1,1,9,1 +PrbElemUl30=268,3,0,14,30,1,1,9,1 +PrbElemUl31=271,2,0,14,31,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwUl0=9,1,0,0,16,0,1 +ExtBfwUl1=9,1,0,0,16,0,1 +ExtBfwUl2=9,1,0,0,16,0,1 +ExtBfwUl3=9,1,0,0,16,0,1 +ExtBfwUl4=9,1,0,0,16,0,1 +ExtBfwUl5=9,1,0,0,16,0,1 +ExtBfwUl6=9,1,0,0,16,0,1 +ExtBfwUl7=9,1,0,0,16,0,1 +ExtBfwUl8=9,1,0,0,16,0,1 +ExtBfwUl9=9,1,0,0,16,0,1 +ExtBfwUl10=9,1,0,0,16,0,1 +ExtBfwUl11=9,1,0,0,16,0,1 +ExtBfwUl12=9,1,0,0,16,0,1 +ExtBfwUl13=9,1,0,0,16,0,1 +ExtBfwUl14=9,1,0,0,16,0,1 +ExtBfwUl15=9,1,0,0,16,0,1 +ExtBfwUl16=9,1,0,0,16,0,1 +ExtBfwUl17=9,1,0,0,16,0,1 +ExtBfwUl18=9,1,0,0,16,0,1 +ExtBfwUl19=9,1,0,0,16,0,1 +ExtBfwUl20=9,1,0,0,16,0,1 +ExtBfwUl21=9,1,0,0,16,0,1 +ExtBfwUl22=9,1,0,0,16,0,1 +ExtBfwUl23=9,1,0,0,16,0,1 +ExtBfwUl24=9,1,0,0,16,0,1 +ExtBfwUl25=9,1,0,0,16,0,1 +ExtBfwUl26=9,1,0,0,16,0,1 +ExtBfwUl27=9,1,0,0,16,0,1 +ExtBfwUl28=9,1,0,0,16,0,1 +ExtBfwUl29=3,1,0,0,16,0,1 +ExtBfwUl30=3,1,0,0,16,0,1 +ExtBfwUl31=2,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_ru.dat new file mode 100755 index 0000000..ff62d78 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/config_file_o_ru.dat @@ -0,0 +1,398 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=32 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,9,0,14,0,1,1,9,1 +PrbElemDl1=9,9,0,14,1,1,1,9,1 +PrbElemDl2=18,9,0,14,2,1,1,9,1 +PrbElemDl3=27,9,0,14,3,1,1,9,1 +PrbElemDl4=36,9,0,14,4,1,1,9,1 +PrbElemDl5=45,9,0,14,5,1,1,9,1 +PrbElemDl6=54,9,0,14,6,1,1,9,1 +PrbElemDl7=63,9,0,14,7,1,1,9,1 +PrbElemDl8=72,9,0,14,8,1,1,9,1 +PrbElemDl9=81,9,0,14,9,1,1,9,1 +PrbElemDl10=90,9,0,14,10,1,1,9,1 +PrbElemDl11=99,9,0,14,11,1,1,9,1 +PrbElemDl12=108,9,0,14,12,1,1,9,1 +PrbElemDl13=117,9,0,14,13,1,1,9,1 +PrbElemDl14=126,9,0,14,14,1,1,9,1 +PrbElemDl15=135,9,0,14,15,1,1,9,1 +PrbElemDl16=144,9,0,14,16,1,1,9,1 +PrbElemDl17=153,9,0,14,17,1,1,9,1 +PrbElemDl18=162,9,0,14,18,1,1,9,1 +PrbElemDl19=171,9,0,14,19,1,1,9,1 +PrbElemDl20=180,9,0,14,20,1,1,9,1 +PrbElemDl21=189,9,0,14,21,1,1,9,1 +PrbElemDl22=198,9,0,14,22,1,1,9,1 +PrbElemDl23=207,9,0,14,23,1,1,9,1 +PrbElemDl24=216,9,0,14,24,1,1,9,1 +PrbElemDl25=225,9,0,14,25,1,1,9,1 +PrbElemDl26=234,9,0,14,26,1,1,9,1 +PrbElemDl27=245,9,0,14,27,1,1,9,1 +PrbElemDl28=254,9,0,14,28,1,1,9,1 +PrbElemDl29=265,3,0,14,29,1,1,9,1 +PrbElemDl30=268,3,0,14,30,1,1,9,1 +PrbElemDl31=271,2,0,14,31,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=9,1,0,0,16,0,1 +ExtBfwDl1=9,1,0,0,16,0,1 +ExtBfwDl2=9,1,0,0,16,0,1 +ExtBfwDl3=9,1,0,0,16,0,1 +ExtBfwDl4=9,1,0,0,16,0,1 +ExtBfwDl5=9,1,0,0,16,0,1 +ExtBfwDl6=9,1,0,0,16,0,1 +ExtBfwDl7=9,1,0,0,16,0,1 +ExtBfwDl8=9,1,0,0,16,0,1 +ExtBfwDl9=9,1,0,0,16,0,1 +ExtBfwDl10=9,1,0,0,16,0,1 +ExtBfwDl11=9,1,0,0,16,0,1 +ExtBfwDl12=9,1,0,0,16,0,1 +ExtBfwDl13=9,1,0,0,16,0,1 +ExtBfwDl14=9,1,0,0,16,0,1 +ExtBfwDl15=9,1,0,0,16,0,1 +ExtBfwDl16=9,1,0,0,16,0,1 +ExtBfwDl17=9,1,0,0,16,0,1 +ExtBfwDl18=9,1,0,0,16,0,1 +ExtBfwDl19=9,1,0,0,16,0,1 +ExtBfwDl20=9,1,0,0,16,0,1 +ExtBfwDl21=9,1,0,0,16,0,1 +ExtBfwDl22=9,1,0,0,16,0,1 +ExtBfwDl23=9,1,0,0,16,0,1 +ExtBfwDl24=9,1,0,0,16,0,1 +ExtBfwDl25=9,1,0,0,16,0,1 +ExtBfwDl26=9,1,0,0,16,0,1 +ExtBfwDl27=9,1,0,0,16,0,1 +ExtBfwDl28=9,1,0,0,16,0,1 +ExtBfwDl29=3,1,0,0,16,0,1 +ExtBfwDl30=3,1,0,0,16,0,1 +ExtBfwDl31=2,1,0,0,16,0,1 + +nPrbElemUl=32 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,9,0,14,0,1,1,9,1 +PrbElemUl1=9,9,0,14,1,1,1,9,1 +PrbElemUl2=18,9,0,14,2,1,1,9,1 +PrbElemUl3=27,9,0,14,3,1,1,9,1 +PrbElemUl4=36,9,0,14,4,1,1,9,1 +PrbElemUl5=45,9,0,14,5,1,1,9,1 +PrbElemUl6=54,9,0,14,6,1,1,9,1 +PrbElemUl7=63,9,0,14,7,1,1,9,1 +PrbElemUl8=72,9,0,14,8,1,1,9,1 +PrbElemUl9=81,9,0,14,9,1,1,9,1 +PrbElemUl10=90,9,0,14,10,1,1,9,1 +PrbElemUl11=99,9,0,14,11,1,1,9,1 +PrbElemUl12=108,9,0,14,12,1,1,9,1 +PrbElemUl13=117,9,0,14,13,1,1,9,1 +PrbElemUl14=126,9,0,14,14,1,1,9,1 +PrbElemUl15=135,9,0,14,15,1,1,9,1 +PrbElemUl16=144,9,0,14,16,1,1,9,1 +PrbElemUl17=153,9,0,14,17,1,1,9,1 +PrbElemUl18=162,9,0,14,18,1,1,9,1 +PrbElemUl19=171,9,0,14,19,1,1,9,1 +PrbElemUl20=180,9,0,14,20,1,1,9,1 +PrbElemUl21=189,9,0,14,21,1,1,9,1 +PrbElemUl22=198,9,0,14,22,1,1,9,1 +PrbElemUl23=207,9,0,14,23,1,1,9,1 +PrbElemUl24=216,9,0,14,24,1,1,9,1 +PrbElemUl25=225,9,0,14,25,1,1,9,1 +PrbElemUl26=234,9,0,14,26,1,1,9,1 +PrbElemUl27=245,9,0,14,27,1,1,9,1 +PrbElemUl28=254,9,0,14,28,1,1,9,1 +PrbElemUl29=265,3,0,14,29,1,1,9,1 +PrbElemUl30=268,3,0,14,30,1,1,9,1 +PrbElemUl31=271,2,0,14,31,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwUl0=9,1,0,0,16,0,1 +ExtBfwUl1=9,1,0,0,16,0,1 +ExtBfwUl2=9,1,0,0,16,0,1 +ExtBfwUl3=9,1,0,0,16,0,1 +ExtBfwUl4=9,1,0,0,16,0,1 +ExtBfwUl5=9,1,0,0,16,0,1 +ExtBfwUl6=9,1,0,0,16,0,1 +ExtBfwUl7=9,1,0,0,16,0,1 +ExtBfwUl8=9,1,0,0,16,0,1 +ExtBfwUl9=9,1,0,0,16,0,1 +ExtBfwUl10=9,1,0,0,16,0,1 +ExtBfwUl11=9,1,0,0,16,0,1 +ExtBfwUl12=9,1,0,0,16,0,1 +ExtBfwUl13=9,1,0,0,16,0,1 +ExtBfwUl14=9,1,0,0,16,0,1 +ExtBfwUl15=9,1,0,0,16,0,1 +ExtBfwUl16=9,1,0,0,16,0,1 +ExtBfwUl17=9,1,0,0,16,0,1 +ExtBfwUl18=9,1,0,0,16,0,1 +ExtBfwUl19=9,1,0,0,16,0,1 +ExtBfwUl20=9,1,0,0,16,0,1 +ExtBfwUl21=9,1,0,0,16,0,1 +ExtBfwUl22=9,1,0,0,16,0,1 +ExtBfwUl23=9,1,0,0,16,0,1 +ExtBfwUl24=9,1,0,0,16,0,1 +ExtBfwUl25=9,1,0,0,16,0,1 +ExtBfwUl26=9,1,0,0,16,0,1 +ExtBfwUl27=9,1,0,0,16,0,1 +ExtBfwUl28=9,1,0,0,16,0,1 +ExtBfwUl29=3,1,0,0,16,0,1 +ExtBfwUl30=3,1,0,0,16,0,1 +ExtBfwUl31=2,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du.cfg new file mode 100644 index 0000000..1c9b266 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=2 # core id +ioWorker=0x38 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du2.cfg new file mode 100644 index 0000000..84b7118 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx.cfg new file mode 100644 index 0000000..085d2ff --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx2.cfg new file mode 100644 index 0000000..46b4f07 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru.cfg new file mode 100644 index 0000000..bb4c4dc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=21 #core for main() +systemCore=22 +ioCore=23 # core id +ioWorker=0x1F000000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru2.cfg new file mode 100644 index 0000000..b056df9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx.cfg new file mode 100644 index 0000000..a3a137a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx2.cfg new file mode 100644 index 0000000..923df74 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/153/usecase_ru_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..b4ceab3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 10 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..a2d2409 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 10 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..37839c0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..f72df10 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..7181c9b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..06aac42 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b6c0205 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_du.dat new file mode 100755 index 0000000..4ff5768 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_du.dat @@ -0,0 +1,304 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_ru.dat new file mode 100755 index 0000000..216a41d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/config_file_o_ru.dat @@ -0,0 +1,344 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du.cfg new file mode 100644 index 0000000..2955db4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=16 # core id +ioWorker=0x00000000000E0000 # mask [0- no workers] +#ioWorker=0x700000600 +#oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du2.cfg new file mode 100644 index 0000000..38ac99d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +#ioWorker=0x700000600 +#oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx.cfg new file mode 100644 index 0000000..09cf7b2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx2.cfg new file mode 100644 index 0000000..3f00db5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru.cfg new file mode 100644 index 0000000..55011df --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru.cfg @@ -0,0 +1,66 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x000000F800000000 # second socket +# ioWorker=0x200 # second socket +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru2.cfg new file mode 100644 index 0000000..1765545 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +# ioWorker=0x200 # second socket +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:bc +# oXuRem0Mac1=b4:96:91:94:dd:bd +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx.cfg new file mode 100644 index 0000000..95aaa59 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx2.cfg new file mode 100644 index 0000000..123dca4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/154/usecase_ru_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +# oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..650fad9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d38d03b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_du_tst376.dat index 803946f..99767b2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -213,39 +212,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_ru_tst376.dat index 69ffee9..3130898 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -263,39 +262,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du2.cfg new file mode 100644 index 0000000..24dd866 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#===== Test case for 32T32R antElm, 8 DL 4 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx.cfg index 47f24f1..be846ea 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx.cfg @@ -20,7 +20,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x200 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx2.cfg new file mode 100644 index 0000000..d39e121 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru2.cfg new file mode 100644 index 0000000..42cb996 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 8 DL 4 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx.cfg index 0b67ec2..be4fcb8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx.cfg @@ -19,7 +19,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x3E00 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx2.cfg new file mode 100644 index 0000000..6b98d55 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/1841/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du.xml index f2dfa93..54d71d2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..5ef62b5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2afe236 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru.xml index 8068127..f5044d0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 10 - 4 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..ae95f90 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..2ef84ef --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_du.dat index f352ca4..f54bdeb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_du.dat @@ -18,16 +18,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -57,13 +56,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] #ioSleep=1 # Eth 0 @@ -144,11 +141,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -159,14 +156,14 @@ PrbElemDl6=216,36,0,14,7,1,1,9,1 PrbElemDl7=252,21,0,14,8,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=72,36,0,14,3,1,1,9,1 @@ -177,8 +174,8 @@ PrbElemUl6=216,36,0,14,7,1,1,9,1 PrbElemUl7=252,21,0,14,8,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -202,39 +199,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_ru.dat index 3ec32b7..63b3d07 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/config_file_o_ru.dat @@ -18,16 +18,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -57,13 +56,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 -ioWorker=0x800000000 # Eth 0 @@ -122,79 +119,79 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -205,14 +202,14 @@ PrbElemDl6=216,36,0,14,7,1,1,9,1 PrbElemDl7=252,21,0,14,8,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=72,36,0,14,3,1,1,9,1 @@ -223,8 +220,8 @@ PrbElemUl6=216,36,0,14,7,1,1,9,1 PrbElemUl7=252,21,0,14,8,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -248,39 +245,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du.cfg index bcbc49a..9609c3d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du2.cfg new file mode 100644 index 0000000..eecd79a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du_icx2.cfg new file mode 100644 index 0000000..063ed31 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_du.dat index 2f7da13..29df7aa 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,13 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -116,6 +113,7 @@ UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX anten UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +dropPacketsUp=0 # Enable (1)| disable (0) Dropping of UP packets if it missing the timing window check rachEnable=0 # Enable (1)| disable (0) PRACH configuration prachConfigIndex=189 @@ -127,11 +125,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -145,7 +143,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -180,39 +178,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_ru.dat index 48ed086..77b2122 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/config_file_o_ru.dat @@ -19,16 +19,15 @@ #TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,12 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -120,47 +118,47 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -168,7 +166,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -197,39 +195,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du2.cfg new file mode 100644 index 0000000..9140b3a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du_icx2.cfg new file mode 100644 index 0000000..f1fcbad --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/201/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du.xml index 2bf7e5f..0703105 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 8 + 4 - 8 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..a14c766 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..732cf8d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 4,5,6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..7955265 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml index 8068127..3a505f4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 12 - 4 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..363eade --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d937771 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 12 + + 10 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_du.dat index dc96cae..c7b63bc 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -144,11 +141,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -166,7 +163,7 @@ ExtBfwDl5=11,3,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -205,39 +202,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_ru.dat index 42876c4..4a9346a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,78 +119,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -202,7 +200,7 @@ PrbElemDl5=240,33,0,14,6,1,1,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -233,39 +231,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du.cfg index bcbc49a..c524a85 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du.cfg @@ -18,9 +18,10 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx.cfg new file mode 100644 index 0000000..6e08042 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx2.cfg new file mode 100644 index 0000000..0349249 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] //4 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/202/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_du.dat index 587821f..608019f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_du.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,13 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -145,11 +142,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -163,7 +160,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -194,39 +191,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_ru.dat index 875aab1..89753e2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/config_file_o_ru.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,12 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,78 +120,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -201,7 +199,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -228,39 +226,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/203/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_du.dat index 892e621..352d67f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_du.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,13 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -145,11 +142,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -163,7 +160,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -194,39 +191,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_ru.dat index 615ec40..5f0a291 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/config_file_o_ru.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,12 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,78 +120,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -201,7 +199,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -228,39 +226,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/204/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_du.dat index 6ca1995..6425983 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -147,11 +144,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -165,7 +162,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -196,39 +193,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_ru.dat index 9b5a1e5..c30ee7b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,81 +119,81 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -203,7 +201,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -230,39 +228,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru.cfg new file mode 100644 index 0000000..ac0d143 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/205/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_du.dat index 5d0d560..ef97f5f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -147,11 +144,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -165,7 +162,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -200,39 +197,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_ru.dat index bec4aa6..1107e63 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,81 +119,81 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -203,7 +201,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -232,39 +230,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/206/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_du.dat index f302665..1b611ea 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_du.dat @@ -19,16 +19,15 @@ #TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,13 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -127,11 +124,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -145,7 +142,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -180,39 +177,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_ru.dat index fb2f1a0..e7a2d26 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/config_file_o_ru.dat @@ -19,16 +19,15 @@ #TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -58,12 +57,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -120,47 +118,47 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -168,7 +166,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -197,39 +195,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/211/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du.xml index 2bf7e5f..da55eb6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 8 + 4 8 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..591b38d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 8 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..064b27d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 8 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru.xml index 8068127..624e6c1 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 29 - 4 + 8 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..be34c1f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 8 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..93ec69c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 8 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_du.dat index 859e486..9225fe7 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,7 +58,7 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -129,11 +128,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -151,7 +150,7 @@ ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -190,39 +189,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_ru.dat index aa7e82d..0b016ee 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,7 +58,7 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -108,78 +107,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -198,7 +197,7 @@ ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -237,39 +236,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du.cfg index 358e178..05b4a2b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du.cfg @@ -18,10 +18,10 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=10 # core id -ioWorker=0x4000000000000 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] dpdkMemorySize=8192 oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du2.cfg new file mode 100644 index 0000000..6a34717 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du_icx2.cfg new file mode 100644 index 0000000..3c9a0d1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru.cfg index 3ab240f..0d4a022 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru.cfg @@ -18,8 +18,12 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +mainCore=11 +systemCore=12 # DPDK main I/O core +ioCore=13 # core id +ioWorker=0x4000 # 00004 00000 00000 00000 (62) +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru2.cfg new file mode 100644 index 0000000..76d46a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru_icx2.cfg new file mode 100644 index 0000000..16758f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/212/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_du.dat index b5f6bb9..c2deb33 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_du.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,13 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -145,11 +142,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -163,7 +160,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -194,39 +191,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_ru.dat index 15c8885..5493e77 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/config_file_o_ru.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,12 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,78 +120,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -201,7 +199,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -228,39 +226,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/213/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_du.dat index faef29c..4a40ab7 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_du.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,13 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -145,11 +142,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -163,7 +160,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -194,39 +191,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_ru.dat index c895ae6..f2f7c13 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/config_file_o_ru.dat @@ -21,16 +21,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -60,12 +59,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -122,78 +120,78 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -201,7 +199,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -228,39 +226,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du2.cfg new file mode 100644 index 0000000..7adf505 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du_icx2.cfg new file mode 100644 index 0000000..89a9486 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/214/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_du.dat index 07cdeb4..993d9fe 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -147,11 +144,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -165,7 +162,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights @@ -196,39 +193,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_ru.dat index 7277c44..512b920 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,81 +119,81 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -203,7 +201,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 @@ -230,39 +228,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du.cfg index 9f52c58..07e0e58 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du2.cfg new file mode 100644 index 0000000..5e77dbe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du_icx2.cfg new file mode 100644 index 0000000..578eb5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/215/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_du.dat index c1faafc..3e18212 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_du.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,13 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -147,11 +144,11 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -165,7 +162,7 @@ ExtBfwDl3=12,4,0,0,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -200,39 +197,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_ru.dat index ac02a9d..9735a4e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/config_file_o_ru.dat @@ -20,16 +20,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -59,12 +58,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -121,81 +119,81 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #33% 90 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,48,0,14,1,1,1,9,1 PrbElemDl1=48,48,0,14,2,1,1,9,1 PrbElemDl2=96,48,0,14,3,1,1,9,1 @@ -203,7 +201,7 @@ PrbElemDl3=144,48,0,14,4,1,1,9,1 nPrbElemUl=4 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,48,0,14,1,1,1,9,1 PrbElemUl1=48,48,0,14,2,1,1,9,1 PrbElemUl2=96,48,0,14,3,1,1,9,1 @@ -232,39 +230,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du.cfg index dba74dd..f11b5c2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du.cfg @@ -18,16 +18,15 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) -oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml - oXuCfgFile0=./config_file_o_du.dat #O-RU0 #O-XU 0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/216/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_du.dat new file mode 100644 index 0000000..bcf96e3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_du.dat @@ -0,0 +1,215 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_ru.dat new file mode 100644 index 0000000..25557de --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/config_file_o_ru.dat @@ -0,0 +1,233 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/221/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_du.dat new file mode 100644 index 0000000..77c9a06 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_du.dat @@ -0,0 +1,240 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:5 1 64T64R 100 16 8 100.0% 273 3276 100.0% 273 3276 1 peak + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +PrbElemDl4=192,48,0,14,5,1,1,9,1 +PrbElemDl5=240,33,0,14,6,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +PrbElemUl4=192,48,0,14,5,1,1,9,1 +PrbElemUl5=240,33,0,14,6,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_ru.dat new file mode 100644 index 0000000..124dd1a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/config_file_o_ru.dat @@ -0,0 +1,269 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:5 1 64T64R 100 16 8 100.0% 273 3276 100.0% 273 3276 1 peak + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +PrbElemDl4=192,48,0,14,5,1,1,9,1 +PrbElemDl5=240,33,0,14,6,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +PrbElemUl4=192,48,0,14,5,1,1,9,1 +PrbElemUl5=240,33,0,14,6,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/222/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_du.dat new file mode 100644 index 0000000..c0cc2a9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_du.dat @@ -0,0 +1,229 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 35% center + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_ru.dat new file mode 100644 index 0000000..e36ff21 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/config_file_o_ru.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 35% center + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/223/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_du.dat new file mode 100644 index 0000000..8105274 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_du.dat @@ -0,0 +1,229 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 45% mid + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_ru.dat new file mode 100644 index 0000000..accc34b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/config_file_o_ru.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 45% mid + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/224/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_du.dat new file mode 100644 index 0000000..2decb64 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_du.dat @@ -0,0 +1,231 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 4 1 70.3% 192 2304 35.0% 96 1152 20% edge + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_ru.dat new file mode 100644 index 0000000..ca5dc08 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/config_file_o_ru.dat @@ -0,0 +1,266 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 4 1 70.3% 192 2304 35.0% 96 1152 20% edge + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/225/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_du.dat new file mode 100644 index 0000000..e62dffb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_du.dat @@ -0,0 +1,235 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 8 4 70.3% 192 2304 70.0% 191 2292 70% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_ru.dat new file mode 100644 index 0000000..5631799 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/config_file_o_ru.dat @@ -0,0 +1,268 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 8 4 70.3% 192 2304 70.0% 191 2292 70% + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/226/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_du.dat new file mode 100644 index 0000000..ac26bf5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_du.dat @@ -0,0 +1,215 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_ru.dat new file mode 100644 index 0000000..18e0fa8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/config_file_o_ru.dat @@ -0,0 +1,233 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 8T8R 100 8 4 70.3% 192 2304 70.0% 191 2292 new added 70% with 8T8R + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=8 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/231/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_du.dat new file mode 100644 index 0000000..15c997f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_du.dat @@ -0,0 +1,240 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:5 1 64T64R 100 16 8 100.0% 273 3276 100.0% 273 3276 1 peak + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +PrbElemDl4=192,48,0,14,5,1,1,9,1 +PrbElemDl5=240,33,0,14,6,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +PrbElemUl4=192,48,0,14,5,1,1,9,1 +PrbElemUl5=240,33,0,14,6,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_ru.dat new file mode 100644 index 0000000..e6d0542 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/config_file_o_ru.dat @@ -0,0 +1,269 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:5 1 64T64R 100 16 8 100.0% 273 3276 100.0% 273 3276 1 peak + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +PrbElemDl4=192,48,0,14,5,1,1,9,1 +PrbElemDl5=240,33,0,14,6,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +PrbElemUl4=192,48,0,14,5,1,1,9,1 +PrbElemUl5=240,33,0,14,6,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/232/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_du.dat new file mode 100644 index 0000000..36b9936 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_du.dat @@ -0,0 +1,229 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 35% center + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_ru.dat new file mode 100644 index 0000000..b7741a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/config_file_o_ru.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 35% center + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/233/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_du.dat new file mode 100644 index 0000000..46ef539 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_du.dat @@ -0,0 +1,229 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 45% mid + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_ru.dat new file mode 100644 index 0000000..4b5d64d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/config_file_o_ru.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 16 4 70.3% 192 2304 35.0% 96 1152 45% mid + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/234/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_du.dat new file mode 100644 index 0000000..2897a26 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_du.dat @@ -0,0 +1,231 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 4 1 70.3% 192 2304 35.0% 96 1152 20% edge + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_ru.dat new file mode 100644 index 0000000..6eabfa3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/config_file_o_ru.dat @@ -0,0 +1,266 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 4 1 70.3% 192 2304 35.0% 96 1152 20% edge + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/235/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_du.dat new file mode 100644 index 0000000..1431d0c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_du.dat @@ -0,0 +1,235 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 8 4 70.3% 192 2304 70.0% 191 2292 70% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_ru.dat new file mode 100644 index 0000000..78cc3f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/config_file_o_ru.dat @@ -0,0 +1,268 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#TDD DDDSUUDDDD: S it's 6:4:4 1 64T64R 100 8 4 70.3% 192 2304 70.0% 191 2292 70% + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#33% 90 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=96,48,0,14,3,1,1,9,1 +PrbElemUl3=144,48,0,14,4,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du.cfg new file mode 100644 index 0000000..5c067f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru.cfg new file mode 100644 index 0000000..1ab0180 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/236/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..0879a82 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..cf32e07 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..6e4fbb6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 4,5,6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..0f9b204 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..c648da7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..acd567c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..7816811 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_du_tst376.dat index b91d4ae..e6b5a21 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_du_tst376.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -138,7 +137,7 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -extType=1 + nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType # weight base beams @@ -149,13 +148,13 @@ PrbElemDl3=144,48,0,14,3,1,1,9,1 PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -167,18 +166,39 @@ PrbElemUl3=144,48,0,14,3,1,1,9,1 PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 nPrbElemSrs=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType PrbElemSrs0=0,273,13,1,0,0,1,9,0 +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + ########################################################### ## control of IQ byte order diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_ru_tst376.dat index d4a6e0a..ed10dac 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -188,7 +187,7 @@ antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -extType=1 + nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType # weight base beams @@ -199,13 +198,13 @@ PrbElemDl3=144,48,0,14,3,1,1,9,1 PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -217,18 +216,28 @@ PrbElemUl3=144,48,0,14,3,1,1,9,1 PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 nPrbElemSrs=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType PrbElemSrs0=0,273,13,1,0,0,1,9,0 +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 ########################################################### ## control of IQ byte order diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du.cfg index 867f4d9..05a8874 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du.cfg @@ -15,20 +15,18 @@ # limitations under the License. # #******************************************************************************/ - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments - appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + -mainCore=20 #core for main() -systemCore=22 -ioCore=28 # core id -#ioWorker=0x000000000 # mask [0- no workers] -#ioWorker=0x8000040000 # mask [0- no workers] -ioWorker=0x760000000 # mask [0- no workers] -#ioWorker=0x700000600 -dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +# dlCpProcBurst=1 + +dpdkMemorySize=16384 iovaMode=0 oXuNum=2 # numbers of O-RU connected to O-DU @@ -38,12 +36,13 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 -oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 oXuRem0Mac1=00:11:22:33:00:11 - # remote O-XU 0 Eth Link 1 oXuRem0Mac2=00:11:22:33:00:21 oXuRem0Mac3=00:11:22:33:00:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du2.cfg new file mode 100644 index 0000000..622a733 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +# dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx.cfg index 8f37eb0..d9f7e95 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx.cfg @@ -15,17 +15,14 @@ # limitations under the License. # #******************************************************************************/ - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id - -ioWorker=0xE00 # mask [0- no workers] - +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 iovaMode=0 @@ -35,6 +32,7 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx2.cfg new file mode 100644 index 0000000..b38f210 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_du_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru.cfg index a90be3d..f8a0d2e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru.cfg @@ -17,18 +17,17 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id -#ioWorker=0x800000000 # mask [0- no workers] -#ioWorker=0x800004000 # mask [0- no workers] -#ioWorker=0xc000000 # second socket -ioWorker=0x3E00 # second socket - -dpdkMemorySize=8192 +mainCore=11 #core for main() +systemCore=12 +ioCore=13 # core id +ioWorker=0x7C000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=16384 iovaMode=0 oXuNum=2 # numbers of O-RU connected to O-DU @@ -38,7 +37,8 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 -oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru2.cfg new file mode 100644 index 0000000..07003b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx.cfg index 0e1668e..e0569e5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx.cfg @@ -17,13 +17,15 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id - -ioWorker=0x3E00 # mask [0- no workers] +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=11 #core for main() +systemCore=12 +ioCore=13 # core id +ioWorker=0x7C000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=8192 iovaMode=0 @@ -36,7 +38,6 @@ oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 - # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 oXuRem0Mac1=00:11:22:33:00:10 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx2.cfg new file mode 100644 index 0000000..2f9fab9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/242/usecase_ru_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..27a0e8e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 14 + + 14 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx.xml index a86e9b1..b7c20a9 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,37,6,38,7,39,8,40,9,41,10,42 2 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..0f9b204 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru.xml index 8068127..fb40999 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru.xml @@ -45,9 +45,9 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 2 1,1,1,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..5a0cc41 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..ec69edd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_du_tst376.dat index 57d20fd..7654dcb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_du_tst376.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -199,39 +198,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_ru_tst376.dat index 1e0f13d..94987a3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -249,39 +248,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du2.cfg new file mode 100644 index 0000000..22d5bd2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx.cfg index f56c265..0684f23 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx.cfg @@ -20,11 +20,11 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=8 # core id +ioCore=3 # core id -ioWorker=0x200 # mask [0- no workers] +ioWorker=0x10 # mask [0- no workers] dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx2.cfg new file mode 100644 index 0000000..9cebb5b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru.cfg index a90be3d..9fc2a7b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru.cfg @@ -27,6 +27,7 @@ ioCore=8 # core id #ioWorker=0x800004000 # mask [0- no workers] #ioWorker=0xc000000 # second socket ioWorker=0x3E00 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru2.cfg new file mode 100644 index 0000000..d10101a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx.cfg index 0e1668e..004e4c3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx.cfg @@ -18,13 +18,12 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id - -ioWorker=0x3E00 # mask [0- no workers] +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] dpdkMemorySize=8192 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx2.cfg new file mode 100644 index 0000000..5ea092d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2422/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..6aa1d2c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6aa1d2c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..93c5b18 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..01d7255 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..dbc8084 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..50c96ef --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 23,63,24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..21052be --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_du.dat new file mode 100755 index 0000000..75b1eb5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_du.dat @@ -0,0 +1,283 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_ru.dat new file mode 100755 index 0000000..600b15c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/config_file_o_ru.dat @@ -0,0 +1,334 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du.cfg new file mode 100644 index 0000000..adb78eb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=16 # core id +ioWorker=0x0000000000080000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du2.cfg new file mode 100644 index 0000000..98fe816 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x0000000000080000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx.cfg new file mode 100644 index 0000000..9f607e6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx.cfg @@ -0,0 +1,60 @@ + #****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx2.cfg new file mode 100644 index 0000000..9659177 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru.cfg new file mode 100644 index 0000000..b106e29 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +ioWorker=0x000000F800000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru2.cfg new file mode 100644 index 0000000..030b242 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0x000000F800000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx.cfg new file mode 100644 index 0000000..9eaf65a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx2.cfg new file mode 100644 index 0000000..645cf20 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/252/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..b217bf6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 10 + + 8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..fb3e7a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 10 + + 8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..ea4d6b5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..e65bb42 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..dbc8084 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..af0c863 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..21052be --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 18 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du.dat new file mode 100755 index 0000000..d593665 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du_1.dat new file mode 100755 index 0000000..b2408b6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_du_1.dat @@ -0,0 +1,246 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us + +# Time by which the packet should be transmitted in advance for a far distant RU +adv_tx_time=16 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru.dat new file mode 100755 index 0000000..6c29fc3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru.dat @@ -0,0 +1,293 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru_1.dat new file mode 100755 index 0000000..964bf70 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/config_file_o_ru_1.dat @@ -0,0 +1,296 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us + +# Time by which the packet should be transmitted in advance for a far distant RU +adv_tx_time=0 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du.cfg new file mode 100644 index 0000000..84909bc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=0 +ioCore=2 # core id +ioWorker=0x78 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du2.cfg new file mode 100644 index 0000000..cfdf309 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0xF0 # mask [0- no workers] +ioWorker_64_127=0x0000 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx.cfg new file mode 100644 index 0000000..af1b80f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx.cfg @@ -0,0 +1,60 @@ + #****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0xF0 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx2.cfg new file mode 100644 index 0000000..27df940 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ + #****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0xF0 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru.cfg new file mode 100644 index 0000000..a8206a3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru2.cfg new file mode 100644 index 0000000..b30171c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 +ioWorker_64_127=0x0000 + +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=10240 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx.cfg new file mode 100644 index 0000000..97326c6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=12 #core for main() +systemCore=13 +ioCore=14 # core id +ioWorker=0xF8000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ae92058 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2522/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..289f9d3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 15 + + 6,7,8,9,10,11,12,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..67dbfd6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 15 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..cbae949 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..01d7255 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 17 + + 15 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..a0a0f00 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..5ecb75f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..02d31c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_du.dat new file mode 100755 index 0000000..4ff5768 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_du.dat @@ -0,0 +1,304 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_ru.dat new file mode 100755 index 0000000..216a41d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/config_file_o_ru.dat @@ -0,0 +1,344 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du.cfg new file mode 100644 index 0000000..b52aff9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=2 # core id +ioWorker=0x38 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du2.cfg new file mode 100644 index 0000000..d0aa14f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +#oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx.cfg new file mode 100644 index 0000000..09f1a39 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx2.cfg new file mode 100644 index 0000000..b85b980 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru.cfg new file mode 100644 index 0000000..71c40a9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=12 #core for main() +systemCore=13 +ioCore=14 # core id +ioWorker=0xF8000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru2.cfg new file mode 100644 index 0000000..b2dda6e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no worker] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx.cfg new file mode 100644 index 0000000..c2a4615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=19 #core for main() +systemCore=20 +ioCore=21 # core id +ioWorker=0x7C00000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx2.cfg new file mode 100644 index 0000000..546ed29 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/254/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..650fad9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d38d03b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_du_tst376.dat index 803946f..99767b2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -213,39 +212,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_ru_tst376.dat index 69ffee9..3130898 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -263,39 +262,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du2.cfg new file mode 100644 index 0000000..67b70f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +#oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx.cfg index c7172f9..86910c1 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx.cfg @@ -20,7 +20,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x200 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx2.cfg new file mode 100644 index 0000000..7ef6c5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru2.cfg new file mode 100644 index 0000000..f25876e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +#oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx.cfg index 1f250f4..b144dc0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx.cfg @@ -20,7 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x3E00 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ab8cfaa --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/2842/usecase_ru_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=2 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_du.dat new file mode 100644 index 0000000..d0146bd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_du.dat @@ -0,0 +1,230 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=8 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,36,0,14,1,1,1,9,1 +PrbElemDl1=36,36,0,14,2,1,1,9,1 +PrbElemDl2=72,36,0,14,3,1,1,9,1 +PrbElemDl3=108,36,0,14,4,1,1,9,1 +PrbElemDl4=144,36,0,14,5,1,1,9,1 +PrbElemDl5=180,36,0,14,6,1,1,9,1 +PrbElemDl6=216,36,0,14,7,1,1,9,1 +PrbElemDl7=252,21,0,14,8,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,3,0,0,9,1 +ExtBfwDl1=12,3,0,0,9,1 +ExtBfwDl2=12,3,0,0,9,1 +ExtBfwDl3=12,3,0,0,9,1 +ExtBfwDl4=12,3,0,0,9,1 +ExtBfwDl5=12,3,0,0,9,1 +ExtBfwDl6=12,3,0,0,9,1 +ExtBfwDl7=7,3,0,0,9,1 + +nPrbElemUl=8 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,36,0,14,1,1,1,9,1 +PrbElemUl1=36,36,0,14,2,1,1,9,1 +PrbElemUl2=72,36,0,14,3,1,1,9,1 +PrbElemUl3=108,36,0,14,4,1,1,9,1 +PrbElemUl4=144,36,0,14,5,1,1,9,1 +PrbElemUl5=180,36,0,14,6,1,1,9,1 +PrbElemUl6=216,36,0,14,7,1,1,9,1 +PrbElemUl7=252,21,0,14,8,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,3,0,0,9,1 +ExtBfwUl1=12,3,0,0,9,1 +ExtBfwUl2=12,3,0,0,9,1 +ExtBfwUl3=12,3,0,0,9,1 +ExtBfwUl4=12,3,0,0,9,1 +ExtBfwUl5=12,3,0,0,9,1 +ExtBfwUl6=12,3,0,0,9,1 +ExtBfwUl7=7,3,0,0,9,1 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_ru.dat new file mode 100644 index 0000000..d25743b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/config_file_o_ru.dat @@ -0,0 +1,238 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=8 +max_sections_per_symbol=8 + +nPrbElemDl=8 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,36,0,14,1,1,1,9,1 +PrbElemDl1=36,36,0,14,2,1,1,9,1 +PrbElemDl2=72,36,0,14,3,1,1,9,1 +PrbElemDl3=108,36,0,14,4,1,1,9,1 +PrbElemDl4=144,36,0,14,5,1,1,9,1 +PrbElemDl5=180,36,0,14,6,1,1,9,1 +PrbElemDl6=216,36,0,14,7,1,1,9,1 +PrbElemDl7=252,21,0,14,8,1,1,9,1 + +nPrbElemUl=8 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,36,0,14,1,1,1,9,1 +PrbElemUl1=36,36,0,14,2,1,1,9,1 +PrbElemUl2=72,36,0,14,3,1,1,9,1 +PrbElemUl3=108,36,0,14,4,1,1,9,1 +PrbElemUl4=144,36,0,14,5,1,1,9,1 +PrbElemUl5=180,36,0,14,6,1,1,9,1 +PrbElemUl6=216,36,0,14,7,1,1,9,1 +PrbElemUl7=252,21,0,14,8,1,1,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du.cfg new file mode 100644 index 0000000..82f201e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du.xml index c27a25f..d50d122 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx.xml index f2dfa93..54d71d2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2afe236 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..4f5554b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_du.dat index 64916c0..bd60d3d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -116,6 +115,7 @@ UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX ante UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +dropPacketsUp=0 # Enable (1)| disable (0) Dropping of UP packets if it missing the timing window check rachEnable=0 # Enable (1)| disable (0) PRACH configuration prachConfigIndex=189 @@ -188,39 +188,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_ru.dat index 3a496c8..c7028df 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/config_file_o_ru.dat @@ -18,10 +18,9 @@ #Peak: 100 % #301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % - + # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -237,39 +236,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du.cfg index 0d03372..69ed192 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du.cfg @@ -19,10 +19,10 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=10 # core id -ioWorker=0x4000000000000 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] dpdkMemorySize=8192 oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du2.cfg new file mode 100644 index 0000000..60aad2c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx.cfg new file mode 100644 index 0000000..a860c46 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx2.cfg new file mode 100644 index 0000000..d387f91 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru.cfg index a85a2c3..c4ff22e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru2.cfg new file mode 100644 index 0000000..bfaeb76 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml #O-RU0 +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ef378fe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/301/usecase_ru_icx2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml #O-RU0 +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru.xml index 8068127..f88dead 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru.xml @@ -43,9 +43,9 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_du.dat index 900c8d7..b5172f8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_du.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -171,39 +170,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_ru.dat index e6657bd..4ed14d5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/config_file_o_ru.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -55,7 +54,7 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du.cfg index 0c4ccbb..31eafb1 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du2.cfg new file mode 100644 index 0000000..b2ec254 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx.cfg new file mode 100644 index 0000000..c602670 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/302/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru.xml index 8068127..f88dead 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru.xml @@ -43,9 +43,9 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_du.dat index 032c36e..dc0e76b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -172,39 +171,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_ru.dat index d56af3c..4c61854 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/config_file_o_ru.dat @@ -16,21 +16,20 @@ # #******************************************************************************/ -#NC +#NC #12% #303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du.cfg index a8c572b..e1caf23 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du2.cfg new file mode 100644 index 0000000..a1e0fdf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 + +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx.cfg new file mode 100644 index 0000000..a7f26ba --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx2.cfg new file mode 100644 index 0000000..036018c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/303/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du.xml index c27a25f..10e8290 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,13,34,15,35,16,36,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru.xml index 8068127..f88dead 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru.xml @@ -43,9 +43,9 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_du.dat index 47ebbd9..d103e9c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_du.dat @@ -21,7 +21,6 @@ #304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -60,8 +59,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -184,39 +181,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_ru.dat index 7a1a7f3..7c9dabd 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/config_file_o_ru.dat @@ -21,16 +21,15 @@ #304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -55,12 +54,11 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -117,77 +115,77 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #66% 180 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -231,39 +229,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du.cfg index a21446d..bf6ddae 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du2.cfg new file mode 100644 index 0000000..b588ecc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx.cfg new file mode 100644 index 0000000..655e51b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/304/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du.xml index c27a25f..10e8290 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,13,34,15,35,16,36,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru.xml index 8068127..f88dead 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru.xml @@ -43,9 +43,9 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_du.dat index cbab3a5..2bba4f7 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -172,39 +171,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_ru.dat index 1b399b5..2c83706 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/config_file_o_ru.dat @@ -21,7 +21,6 @@ #305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -216,39 +215,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx.cfg new file mode 100644 index 0000000..d91c68e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/305/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru.xml index 8068127..f88dead 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru.xml @@ -43,9 +43,9 @@ 6 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..862d27f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b8f44b7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_du.dat index d9f82fd..1196f3f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_du.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -173,39 +172,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_ru.dat index fe954c5..2a5faba 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/config_file_o_ru.dat @@ -21,16 +21,15 @@ #306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -55,7 +54,7 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du.cfg index d565dd2..55fed59 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du2.cfg new file mode 100644 index 0000000..eef0970 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx.cfg new file mode 100644 index 0000000..c602670 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/306/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du.xml index c27a25f..0ed3474 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 4 - 6 + 16 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..66e30f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 16 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx.xml index f2dfa93..2ec67d0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,37,6,38,7,39,8,40,9,41,10,42 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2afe236 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru.xml index 8068127..bf69849 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 29 - 4 + 16 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2df2ff3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx.xml new file mode 100644 index 0000000..3df6d9c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..c0551cb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_du.dat index e3621d7..e90494b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -188,39 +187,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_ru.dat index 01f67d1..c624d30 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/config_file_o_ru.dat @@ -18,10 +18,9 @@ #Peak: 100 % #311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % - + # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -237,39 +236,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du.cfg index c38b9f3..19aa9fc 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=10 # core id -ioWorker=0x4000000000000 # mask [0- no workers] +ioCore=5 # core id +ioWorker=0x0000200000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml dpdkMemorySize=8192 @@ -33,7 +33,8 @@ oXuNum=1 # numbers of O-RU connected to O-DU oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -#oXuRxqNumber=48 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dpdkMemorySize=16384 +#oXuRxqNumber=49 # number of HW RX Queues per VF (should >= RX IQ stream per VF) oXuCfgFile0=./config_file_o_du.dat #O-RU0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du2.cfg new file mode 100644 index 0000000..a7e73f0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +#dpdkMemorySize=16384 +#oXuRxqNumber=49 # number of HW RX Queues per VF (should >= RX IQ stream per VF) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx.cfg new file mode 100644 index 0000000..f1836d7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx2.cfg new file mode 100644 index 0000000..f82ce0d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_du_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru.cfg index 3ab240f..f1257c6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru.cfg @@ -18,8 +18,12 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru2.cfg new file mode 100644 index 0000000..76d46a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx.cfg new file mode 100644 index 0000000..add98b6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 +systemCore=19 +ioCore=20 # core id +ioWorker=0x200000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx2.cfg new file mode 100644 index 0000000..16758f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/311/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_du.dat index 1a4ad8e..7e30b59 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_du.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -171,39 +170,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_ru.dat index c9f5a3a..eabadd0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/config_file_o_ru.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -55,7 +54,7 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx.cfg new file mode 100644 index 0000000..e33919c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx2.cfg new file mode 100644 index 0000000..2bb8615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_du_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/312/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_du.dat index 44b9795..061f788 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -172,39 +171,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_ru.dat index 29f60d7..492dc60 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/config_file_o_ru.dat @@ -16,21 +16,20 @@ # #******************************************************************************/ -#NC +#NC #12% #313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx.cfg new file mode 100644 index 0000000..a5992e5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx2.cfg new file mode 100644 index 0000000..2bb8615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_du_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/313/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_du.dat index 5f08ce3..0630b17 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_du.dat @@ -21,7 +21,6 @@ #314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -60,8 +59,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -185,39 +182,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_ru.dat index aa09063..d94099c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/config_file_o_ru.dat @@ -21,16 +21,15 @@ #314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -55,12 +54,11 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -117,77 +115,77 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin #DL PRB / % Used RBs UL PRB / % Used RBs #66% 180 33% 90 ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -232,39 +230,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx.cfg new file mode 100644 index 0000000..e33919c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx2.cfg new file mode 100644 index 0000000..2bb8615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_du_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/314/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_du.dat index 5943fad..6e74615 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -172,39 +171,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_ru.dat index ba0163f..22af1bc 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/config_file_o_ru.dat @@ -21,7 +21,6 @@ #315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -216,39 +215,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx.cfg new file mode 100644 index 0000000..a5992e5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx2.cfg new file mode 100644 index 0000000..2bb8615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_du_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/315/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du.xml index c27a25f..1e72211 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 6 - 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,45,6,46,7,47,8,48,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..39ea6f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_du.dat index ab31ea2..9f74ffe 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_du.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -173,39 +172,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_ru.dat index 4f2b46b..1149316 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/config_file_o_ru.dat @@ -21,16 +21,15 @@ #316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -55,7 +54,7 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx.cfg new file mode 100644 index 0000000..e33919c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx2.cfg new file mode 100644 index 0000000..2bb8615 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_du_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru.cfg index 3ab240f..e094b80 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/316/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..94c93ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..650fad9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..d38d03b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_du.dat index b8ab7bc..bdc5d20 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -142,12 +141,12 @@ PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +ExtBfwDl0=48,1,0,0,9,1,1 +ExtBfwDl1=48,1,0,0,9,1,1 +ExtBfwDl2=48,1,0,0,9,1,1 +ExtBfwDl3=48,1,0,0,9,1,1 +ExtBfwDl4=48,1,0,0,9,1,1 +ExtBfwDl5=33,1,0,0,9,1,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -160,12 +159,12 @@ PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +ExtBfwUl0=48,1,0,0,9,1,1 +ExtBfwUl1=48,1,0,0,9,1,1 +ExtBfwUl2=48,1,0,0,9,1,1 +ExtBfwUl3=48,1,0,0,9,1,1 +ExtBfwUl4=48,1,0,0,9,1,1 +ExtBfwUl5=33,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -190,39 +189,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_ru.dat index 67f351f..c29c54f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/config_file_o_ru.dat @@ -21,7 +21,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -190,12 +189,12 @@ PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +ExtBfwDl0=48,1,0,0,9,1,1 +ExtBfwDl1=48,1,0,0,9,1,1 +ExtBfwDl2=48,1,0,0,9,1,1 +ExtBfwDl3=48,1,0,0,9,1,1 +ExtBfwDl4=48,1,0,0,9,1,1 +ExtBfwDl5=33,1,0,0,9,1,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -208,12 +207,12 @@ PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +ExtBfwUl0=48,1,0,0,9,1,1 +ExtBfwUl1=48,1,0,0,9,1,1 +ExtBfwUl2=48,1,0,0,9,1,1 +ExtBfwUl3=48,1,0,0,9,1,1 +ExtBfwUl4=48,1,0,0,9,1,1 +ExtBfwUl5=33,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -238,39 +237,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du.cfg index acb472b..41fa36e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x7000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du2.cfg new file mode 100644 index 0000000..11134f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=10240 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml #O-RU0 +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx.cfg index 94db133..8596eaa 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0xF8000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0xF4000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=10240 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx2.cfg new file mode 100644 index 0000000..2c5b0c7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_du_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=10240 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# oXuRem0Mac0=68:05:ca:c1:bf:10 +# oXuRem0Mac1=68:05:ca:c1:bf:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru.cfg index ccf666f..407bc86 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru.cfg @@ -19,7 +19,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id -ioWorker=0xF10000000 # mask [0- no workers] +ioWorker=0x1E10000000 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru2.cfg new file mode 100644 index 0000000..0248f6f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml #O-RU0 +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru_icx2.cfg new file mode 100644 index 0000000..f7980fd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/321/usecase_ru_icx2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml #O-RU0 +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_du.dat index b295624..d04a2ec 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_du.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -137,8 +136,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -147,8 +146,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -173,39 +172,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_ru.dat index 2fb9fee..a97e877 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/config_file_o_ru.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -181,8 +180,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -191,8 +190,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -217,39 +216,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du.cfg index d7b23b7..d31e196 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du2.cfg new file mode 100644 index 0000000..1a6c097 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx.cfg index 95f2781..d91c68e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru2.cfg new file mode 100644 index 0000000..69bfa6c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru_icx2.cfg new file mode 100644 index 0000000..d16d51a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/322/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_du.dat index fdfcea9..eac3e94 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -138,8 +137,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -148,8 +147,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -174,39 +173,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_ru.dat index 7fa60be..af22649 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/config_file_o_ru.dat @@ -21,7 +21,6 @@ #323 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -181,8 +180,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -191,8 +190,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -217,39 +216,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du.cfg index 5eb0082..d59e86f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du2.cfg new file mode 100644 index 0000000..bc91f7a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx.cfg index 1b62744..a7f26ba 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx2.cfg new file mode 100644 index 0000000..036018c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/323/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_du.dat index 0119310..0f0155d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_du.dat @@ -21,7 +21,6 @@ #324 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -60,8 +59,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF @@ -152,8 +149,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -162,8 +159,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -187,39 +184,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_ru.dat index 87b8195..5504ceb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/config_file_o_ru.dat @@ -21,7 +21,6 @@ #324 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -60,7 +59,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -198,8 +196,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -208,8 +206,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -233,39 +231,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du.cfg index a21446d..bf6ddae 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du2.cfg new file mode 100644 index 0000000..b588ecc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx.cfg index 95f2781..c602670 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/324/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx.xml index 8068127..f4de295 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..3f87a03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_du.dat index e2a9d18..44a3bbe 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -139,8 +138,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -149,8 +148,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -175,39 +174,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_ru.dat index 234633f..0228dc3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/config_file_o_ru.dat @@ -21,7 +21,6 @@ #325 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -182,8 +181,8 @@ PrbElemDl0=0,50,0,14,0,1,1,9,1 PrbElemDl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,9,1,1 +ExtBfwDl1=50,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -192,8 +191,8 @@ PrbElemUl0=0,50,0,14,0,1,1,9,1 PrbElemUl1=50,50,0,14,1,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,9,1,1 +ExtBfwUl1=50,1,0,0,9,1,1 nPrbElemSrs=1 PrbElemSrs0=0,273,13,1,0,0,1,9,0 @@ -218,39 +217,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du.cfg index d008bcc..391d924 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du2.cfg new file mode 100644 index 0000000..325743a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx.cfg index 95f2781..c602670 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/325/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du.dat index 7b5a06d..9fa66c6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -198,39 +197,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du_tst377.dat index 668fc51..e0920f2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_du_tst377.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru.dat index b974c28..70d8444 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -250,39 +249,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377.dat index 2d4ea16..f88fc4c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -253,39 +252,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377_dynamic.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377_dynamic.dat new file mode 100644 index 0000000..355ce97 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/avg_o_ru_tst377_dynamic.dat @@ -0,0 +1,291 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +puschMaskEnable=1 # Enable (1)| disable (0) PUSCH Mask +puschMaskSlot=3 # (num mode Frame) slots will not transfer PUSCH channel (def: sym 13) + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst377.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst377.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst377.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst377.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst377.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst377.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst377.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst377.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,64,0,14,0,1,1,9,1 +PrbElemUl1=64,36,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 +#PrbElemSrs1=136,137,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..3930906 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 20 + + 20 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2cf458f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 20 + + 20 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru.xml index 600a5b9..86607c5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru.xml @@ -45,9 +45,9 @@ 10 - 8,48,9,49,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 3 1,1,1,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..39be6b2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..add1750 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_du.dat index f94fd77..05969d4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,8 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] numSlots=10 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 @@ -185,39 +182,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_ru.dat index 3d258da..55ebe1a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/config_file_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,7 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF @@ -236,39 +234,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du.dat index 5091620..06404e8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -209,39 +208,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du_tst376.dat index 9f5e8d0..224d31b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -212,39 +211,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru.dat index cda7097..506fb85 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -259,39 +258,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376.dat index b633b85..8a19000 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -262,39 +261,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376_dynamic.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376_dynamic.dat new file mode 100644 index 0000000..f727b6d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/peak_o_ru_tst376_dynamic.dat @@ -0,0 +1,300 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +puschMaskEnable=1 # Enable (1)| disable (0) PUSCH Mask +puschMaskSlot=3 # (num mode Frame) slots will not transfer PUSCH channel (def: sym 13) + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst376.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst376.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst376.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst376.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst376.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst376.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst376.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst376.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,46,0,14,0,1,1,9,1 +PrbElemUl1=46,46,0,14,1,1,1,9,1 +PrbElemUl2=92,46,0,14,2,1,1,9,1 +PrbElemUl3=138,46,0,14,3,1,1,9,1 +PrbElemUl4=184,46,0,14,4,1,1,9,1 +PrbElemUl5=230,43,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 +#PrbElemSrs1=136,137,0,14,0,0,0,16,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg index c40e036..922293b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id #ioWorker=0x200000000000 # mask [0- no workers] @@ -43,6 +43,7 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs dlCpProcBurst=1 # (1) - send CP as burst xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 #oXuCfgFile0=./avg_o_du_tst377.dat #O-DU1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du2.cfg new file mode 100644 index 0000000..c7ce179 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +#oXuCfgFile0=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du_icx2.cfg new file mode 100644 index 0000000..4e91ac1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_du_icx2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +#oXuCfgFile0=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg index c87490c..fd8f35c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id #ioWorker=0x800000000 # mask [0- no workers] @@ -37,6 +37,7 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs dlCpProcBurst=1 # (1) - send CP as burst xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 #oXuCfgFile0=./avg_o_ru_tst377.dat #O-RU1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru2.cfg new file mode 100644 index 0000000..75d24e4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +ioWorker=0x10000000 # second socket + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +#oXuCfgFile0=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_dynamic.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_dynamic.cfg new file mode 100644 index 0000000..5b957bb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_dynamic.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # second socket + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376_dynamic.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377_dynamic.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377_dynamic.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b643f60 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3301/usecase_ru_icx2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +ioWorker=0x2000000000 # second socket + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +#oXuCfgFile0=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du.dat index 017e4e1..6435130 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -198,39 +197,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du_tst377.dat index a89f5ef..a9671b2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_du_tst377.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru.dat index 4b1323c..46efd42 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -250,39 +249,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru_tst377.dat index 138eee5..8f453b0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/avg_o_ru_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -253,39 +252,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_du.dat index 1000502..42ed4d4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,8 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] numSlots=10 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 @@ -185,39 +182,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_ru.dat index b394e64..933804f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/config_file_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,7 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF @@ -236,39 +234,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du.dat index da029bc..4c60cd6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -209,39 +208,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du_tst376.dat index de7fb5e..c0ff92b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -212,39 +211,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru.dat index 6c658cc..7fd902f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -259,39 +258,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru_tst376.dat index c3b0721..6023dd5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -262,39 +261,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du.cfg index 5b92998..19a26b1 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du.cfg @@ -23,7 +23,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=22 # core id ioWorker=0xC00000800000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du2.cfg new file mode 100644 index 0000000..6108c62 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +#oXuRxqNumber=49 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du_icx2.cfg new file mode 100644 index 0000000..6108c62 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_du_icx2.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +#oXuRxqNumber=49 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru.cfg index 9d02494..09a97b0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru.cfg @@ -22,7 +22,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x3E00 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru2.cfg new file mode 100644 index 0000000..ea51f91 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8df08cf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3311/usecase_ru_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du.dat new file mode 100644 index 0000000..283de50 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du.dat @@ -0,0 +1,235 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU 1 64T64R 100 8 4 65% 178 65% 178 + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du_tst377.dat new file mode 100644 index 0000000..c86bd58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_du_tst377.dat @@ -0,0 +1,242 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru.dat new file mode 100644 index 0000000..b45f0f9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru.dat @@ -0,0 +1,287 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru_tst377.dat new file mode 100644 index 0000000..8706e38 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_o_ru_tst377.dat @@ -0,0 +1,290 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst377.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst377.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst377.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst377.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst377.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst377.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst377.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst377.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_0.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_0.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_1.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_1.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_2.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_2.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_3.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_rxconfig_3.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_0.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_0.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_1.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_1.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_2.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/avg_txconfig_2.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_du.dat new file mode 100644 index 0000000..3252c80 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_ru.dat new file mode 100644 index 0000000..771d4a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/config_file_o_ru.dat @@ -0,0 +1,272 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du.dat new file mode 100644 index 0000000..43167d4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du.dat @@ -0,0 +1,246 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du_tst376.dat new file mode 100644 index 0000000..cb4884d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_du_tst376.dat @@ -0,0 +1,249 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru.dat new file mode 100644 index 0000000..b507113 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru.dat @@ -0,0 +1,296 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru_tst376.dat new file mode 100644 index 0000000..977ae38 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_o_ru_tst376.dat @@ -0,0 +1,299 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst376.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst376.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst376.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst376.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst376.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst376.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst376.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst376.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_0.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_0.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_1.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_1.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_2.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_2.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_3.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_rxconfig_3.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_0.cfg new file mode 100644 index 0000000..b705198 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_0.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_1.cfg new file mode 100644 index 0000000..9359005 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_1.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_2.cfg new file mode 100644 index 0000000..6184512 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/peak_txconfig_2.cfg @@ -0,0 +1,36 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du.cfg new file mode 100644 index 0000000..1fa118e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=22 # core id +ioWorker=0xC00000800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du2.cfg new file mode 100644 index 0000000..a945306 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_csx.cfg new file mode 100644 index 0000000..4d9f87d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_csx.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_icx2.cfg new file mode 100644 index 0000000..a945306 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru.cfg new file mode 100644 index 0000000..09a97b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # second socket + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru2.cfg new file mode 100644 index 0000000..8250c5b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_csx.cfg new file mode 100644 index 0000000..8ee5ce3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_csx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E0000000 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_icx2.cfg new file mode 100644 index 0000000..821a6ea --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3321/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du.dat new file mode 100644 index 0000000..d8bdb60 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du.dat @@ -0,0 +1,235 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU 1 64T64R 100 8 4 65% 178 65% 178 + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du_tst377.dat new file mode 100644 index 0000000..2afd25d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_du_tst377.dat @@ -0,0 +1,242 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru.dat new file mode 100644 index 0000000..c19dec5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru.dat @@ -0,0 +1,287 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru_tst377.dat new file mode 100644 index 0000000..81e97ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_o_ru_tst377.dat @@ -0,0 +1,290 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst377.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst377.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst377.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst377.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst377.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst377.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst377.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst377.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_0.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_0.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_1.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_1.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_2.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_2.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_3.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_rxconfig_3.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_0.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_0.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_1.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_1.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_2.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/avg_txconfig_2.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_du.dat new file mode 100644 index 0000000..c61a960 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_ru.dat new file mode 100644 index 0000000..9d23c57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/config_file_o_ru.dat @@ -0,0 +1,272 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du.dat new file mode 100644 index 0000000..c428787 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du.dat @@ -0,0 +1,246 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du_tst376.dat new file mode 100644 index 0000000..6c48dc3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_du_tst376.dat @@ -0,0 +1,249 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru.dat new file mode 100644 index 0000000..c9d1aa1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru.dat @@ -0,0 +1,296 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,0,14,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru_tst376.dat new file mode 100644 index 0000000..c1764c2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_o_ru_tst376.dat @@ -0,0 +1,299 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst376.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst376.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst376.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst376.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst376.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst376.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst376.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst376.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_0.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_0.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_1.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_1.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_2.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_2.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_3.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_rxconfig_3.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_0.cfg new file mode 100644 index 0000000..b705198 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_0.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_1.cfg new file mode 100644 index 0000000..9359005 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_1.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_2.cfg new file mode 100644 index 0000000..6184512 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/peak_txconfig_2.cfg @@ -0,0 +1,36 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du.cfg new file mode 100644 index 0000000..472f0ab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=22 # core id +ioWorker=0xC00000800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du2.cfg new file mode 100644 index 0000000..7fa26b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_csx.cfg new file mode 100644 index 0000000..4d9f87d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_csx.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_icx2.cfg new file mode 100644 index 0000000..7fa26b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru.cfg new file mode 100644 index 0000000..09a97b0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # second socket + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru2.cfg new file mode 100644 index 0000000..ea51f91 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_csx.cfg new file mode 100644 index 0000000..8ee5ce3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_csx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E0000000 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8df08cf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3331/usecase_ru_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..f43369c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 16 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..e80ec83 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 16 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..a0e0f21 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2d95064 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..d35abeb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 5 + + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c49dc64 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 5 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..14911cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 5 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_du_tst376.dat index b91d4ae..e6b5a21 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_du_tst376.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -138,7 +137,7 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -extType=1 + nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType # weight base beams @@ -149,13 +148,13 @@ PrbElemDl3=144,48,0,14,3,1,1,9,1 PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -167,18 +166,39 @@ PrbElemUl3=144,48,0,14,3,1,1,9,1 PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 nPrbElemSrs=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType PrbElemSrs0=0,273,13,1,0,0,1,9,0 +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + ########################################################### ## control of IQ byte order diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_ru_tst376.dat index d4a6e0a..ed10dac 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -188,7 +187,7 @@ antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used -extType=1 + nPrbElemDl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType # weight base beams @@ -199,13 +198,13 @@ PrbElemDl3=144,48,0,14,3,1,1,9,1 PrbElemDl4=192,48,0,14,4,1,1,9,1 PrbElemDl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,24,0,0,9,1,1 -ExtBfwDl1=2,24,0,0,9,1,1 -ExtBfwDl2=2,24,0,0,9,1,1 -ExtBfwDl3=2,24,0,0,9,1,1 -ExtBfwDl4=2,24,0,0,9,1,1 -ExtBfwDl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 nPrbElemUl=6 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -217,18 +216,28 @@ PrbElemUl3=144,48,0,14,3,1,1,9,1 PrbElemUl4=192,48,0,14,4,1,1,9,1 PrbElemUl5=240,33,0,14,5,1,1,9,1 # Extension Parameters for Beamforming weights -# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,24,0,0,9,1,1 -ExtBfwUl1=2,24,0,0,9,1,1 -ExtBfwUl2=2,24,0,0,9,1,1 -ExtBfwUl3=2,24,0,0,9,1,1 -ExtBfwUl4=2,24,0,0,9,1,1 -ExtBfwUl5=2,17,0,0,9,1,1 +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 nPrbElemSrs=1 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType PrbElemSrs0=0,273,13,1,0,0,1,9,0 +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 ########################################################### ## control of IQ byte order diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du.cfg index 936cff6..fe6e094 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du.cfg @@ -15,15 +15,18 @@ # limitations under the License. # #******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=22 -ioCore=28 # core id +mainCore=2 #core for main() +systemCore=2 +ioCore=16 # core id +ioWorker=0x00000000000E0000 # mask [0- no workers] -ioWorker=0x7E0000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +# dlCpProcBurst=1 dpdkMemorySize=16384 iovaMode=0 @@ -35,13 +38,13 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 -oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 -oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 oXuRem0Mac1=00:11:22:33:00:11 - # remote O-XU 0 Eth Link 1 oXuRem0Mac2=00:11:22:33:00:21 oXuRem0Mac3=00:11:22:33:00:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du2.cfg new file mode 100644 index 0000000..0aab20d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +# dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx.cfg index 9d6dcda..5ac1a35 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx.cfg @@ -15,18 +15,17 @@ # limitations under the License. # #******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=8 # core id - -ioWorker=0x3E00 # mask [0- no workers] - - -dpdkMemorySize=16384 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=12288 iovaMode=0 oXuNum=3 # numbers of O-RU connected to O-DU @@ -35,6 +34,7 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx2.cfg new file mode 100644 index 0000000..5bd6a62 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_du_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=12288 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru.cfg index 218a3a5..09a3ced 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru.cfg @@ -17,13 +17,17 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id -ioWorker=0x3E00 # second socket +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +#ioWorker=0x3E00 # mask [0- no workers] +ioWorker=0x000000F800000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=16384 iovaMode=0 @@ -35,8 +39,8 @@ oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 -oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 -oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru2.cfg new file mode 100644 index 0000000..06a305f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx.cfg index fe27f49..e6db876 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx.cfg @@ -17,14 +17,14 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id - -ioWorker=0x3E00 # second socket - +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +ioWorker_64_127=0x0000 dpdkMemorySize=16384 iovaMode=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx2.cfg new file mode 100644 index 0000000..29805a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/342/usecase_ru_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..9b305f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 14 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..01c97c8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 14 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..a0e0f21 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2d95064 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..f9ebca8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 23,63,24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..14680ab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..6799aac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_du_tst376.dat new file mode 100755 index 0000000..7654dcb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_du_tst376.dat @@ -0,0 +1,236 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_ru_tst376.dat new file mode 100755 index 0000000..94987a3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/peak_o_ru_tst376.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du.cfg new file mode 100644 index 0000000..29ce6db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=0 +ioCore=18 # core id + +ioWorker=0x0000000000080000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du2.cfg new file mode 100644 index 0000000..5a62e2e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx.cfg new file mode 100644 index 0000000..0a9cbb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id + +ioWorker=0x10 # mask [0- no workers] + + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx2.cfg new file mode 100644 index 0000000..f703955 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru.cfg new file mode 100755 index 0000000..ad7bda9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id + +ioWorker=0x000000F800000000 # +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru2.cfg new file mode 100644 index 0000000..e414652 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx.cfg new file mode 100755 index 0000000..966f120 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id + +ioWorker=0x3E00000 # second socket +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7f73509 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3423/usecase_ru_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du.dat index 176071a..f4bd571 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -227,39 +226,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du_tst377.dat index b5c2dce..1ee8fbb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_du_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -230,39 +229,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru.dat index d75630b..53cfd84 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -277,39 +276,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru_tst377.dat index fb6bf8b..d85fbd2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/avg_o_ru_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -280,39 +279,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_du.dat index f94fd77..05969d4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,8 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] numSlots=10 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 @@ -185,39 +182,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_ru.dat index 3d258da..55ebe1a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/config_file_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,7 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF @@ -236,39 +234,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du.dat index 1a793f5..4f4c57a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -267,39 +266,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du_tst376.dat index 017a2ec..03ff106 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -270,39 +269,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru.dat index 9151f31..85cea73 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -315,39 +314,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru_tst376.dat index 6d13ecc..54df610 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -318,39 +317,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du.cfg index 4dd5356..acf196b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du.cfg @@ -23,7 +23,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=21 # core id ioWorker=0xE00000C00000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du2.cfg new file mode 100644 index 0000000..527c812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du2.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=8192 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du_icx2.cfg new file mode 100644 index 0000000..527c812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_du_icx2.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=8192 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru.cfg index 84cdcc2..4f22496 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru.cfg @@ -22,7 +22,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x3E00 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru2.cfg new file mode 100644 index 0000000..d602d62 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ab49bf0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3501/usecase_ru_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du.dat index 701add6..1d8d3fc 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -227,39 +226,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du_tst377.dat index 79b9f98..d3d3bf3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_du_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -230,39 +229,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru.dat index 2e3cd2f..5f21e52 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -277,39 +276,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru_tst377.dat index 73f7a56..957e5ae 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru_tst377.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/avg_o_ru_tst377.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -280,39 +279,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_du.dat index f94fd77..05969d4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,8 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] numSlots=10 #number of slots per IQ files antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 @@ -185,39 +182,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_ru.dat index 3d258da..55ebe1a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/config_file_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,7 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF @@ -236,39 +234,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du.dat index 9fb9abd..f51d338 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -267,39 +266,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du_tst376.dat index f195d1d..6795f0f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_du_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -270,39 +269,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru.dat index 34afb0d..6cc0f8f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru.dat @@ -20,7 +20,6 @@ #301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -315,39 +314,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru_tst376.dat index fc6ed87..5168139 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru_tst376.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/peak_o_ru_tst376.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -318,39 +317,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du.cfg index b50a11c..6f055e5 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du.cfg @@ -23,7 +23,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=21 # core id ioWorker=0xE00000C00000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du2.cfg new file mode 100644 index 0000000..1e77d87 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du_icx2.cfg new file mode 100644 index 0000000..1e77d87 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru.cfg index 84cdcc2..4f22496 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru.cfg @@ -22,7 +22,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x3E00 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru2.cfg new file mode 100644 index 0000000..5df2b2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru_icx2.cfg new file mode 100644 index 0000000..0904d3b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3511/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..560a2ad --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 1 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 26 + + 2,42,3,43,4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..17793e8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 1 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 26 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..b556281 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..51e907c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..f24bba2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 10 + + 23,63,24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..965be6c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 10 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..fb7b765 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 10 + + 36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_du.dat new file mode 100755 index 0000000..f6a9ec9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_du.dat @@ -0,0 +1,283 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_ru.dat new file mode 100755 index 0000000..7b633f1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/config_file_o_ru.dat @@ -0,0 +1,334 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du.cfg new file mode 100644 index 0000000..181634d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=16 # core id +ioWorker=0x00080000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du2.cfg new file mode 100644 index 0000000..5de79d9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=14336 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx.cfg new file mode 100644 index 0000000..cfaeca1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=15306 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 +oXuCfgFile2=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx2.cfg new file mode 100644 index 0000000..8eb7ba7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_du_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=15306 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru.cfg new file mode 100644 index 0000000..1856d99 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=20 +ioCore=30 # core id +ioWorker=0x000000F800000000 # mask [0- no workers] +#ioWorker=0xC00000000FC000 # mask [0- no workers] # mask [0- no workers] +ioWorker_64_127=0x0000 +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=14336 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru2.cfg new file mode 100644 index 0000000..ff6eeda --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +#ioWorker=0xC00000000FC000 # mask [0- no workers] # mask [0- no workers] +ioWorker_64_127=0x0000 +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=14336 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx.cfg new file mode 100644 index 0000000..d366189 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=19 #core for main() +systemCore=20 +ioCore=21 # core id +ioWorker=0x7C00000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml +ioWorker_64_127=0x0000 +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx2.cfg new file mode 100644 index 0000000..acff338 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/352/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du.dat new file mode 100644 index 0000000..0c0973a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du_tst377.dat new file mode 100644 index 0000000..069789f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_du_tst377.dat @@ -0,0 +1,267 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru.dat new file mode 100644 index 0000000..64020da --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru.dat @@ -0,0 +1,314 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru_tst377.dat new file mode 100644 index 0000000..233d569 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_o_ru_tst377.dat @@ -0,0 +1,317 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst377.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst377.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst377.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst377.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst377.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst377.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst377.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst377.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_0.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_0.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_1.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_1.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_2.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_2.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_3.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_rxconfig_3.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_0.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_0.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_1.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_1.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_2.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/avg_txconfig_2.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_du.dat new file mode 100644 index 0000000..3252c80 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_ru.dat new file mode 100644 index 0000000..771d4a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/config_file_o_ru.dat @@ -0,0 +1,272 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du.dat new file mode 100644 index 0000000..36a93e3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du.dat @@ -0,0 +1,304 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du_tst376.dat new file mode 100644 index 0000000..83e636d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_du_tst376.dat @@ -0,0 +1,307 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru.dat new file mode 100644 index 0000000..94301b9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru.dat @@ -0,0 +1,352 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru_tst376.dat new file mode 100644 index 0000000..3d711ef --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_o_ru_tst376.dat @@ -0,0 +1,355 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst376.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst376.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst376.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst376.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst376.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst376.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst376.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst376.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_0.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_0.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_1.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_1.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_2.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_2.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_3.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_rxconfig_3.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_0.cfg new file mode 100644 index 0000000..b705198 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_0.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_1.cfg new file mode 100644 index 0000000..9359005 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_1.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_2.cfg new file mode 100644 index 0000000..6184512 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/peak_txconfig_2.cfg @@ -0,0 +1,36 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du.cfg new file mode 100644 index 0000000..acf196b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=21 # core id +ioWorker=0xE00000C00000 # mask [0- no workers] +dpdkMemorySize=8192 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du2.cfg new file mode 100644 index 0000000..527c812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du2.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=8192 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_csx.cfg new file mode 100644 index 0000000..4d9f87d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_csx.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_icx2.cfg new file mode 100644 index 0000000..527c812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_du_icx2.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=8192 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru.cfg new file mode 100644 index 0000000..4f22496 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # second socket + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru2.cfg new file mode 100644 index 0000000..8694d9a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_csx.cfg new file mode 100644 index 0000000..8ee5ce3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_csx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E0000000 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_icx2.cfg new file mode 100644 index 0000000..0904d3b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3521/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..93a75a2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..622e853 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 20 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..1c54f58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..46c364d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..91d9efa --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..cd75fbd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..dc9987d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du.dat new file mode 100755 index 0000000..d593665 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du_1.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du_1.dat new file mode 100755 index 0000000..b2408b6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_du_1.dat @@ -0,0 +1,246 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us + +# Time by which the packet should be transmitted in advance for a far distant RU +adv_tx_time=16 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru.dat new file mode 100755 index 0000000..f557a23 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru.dat @@ -0,0 +1,293 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru_1.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru_1.dat new file mode 100755 index 0000000..cb7a5b1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/config_file_o_ru_1.dat @@ -0,0 +1,296 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=48,1,0,0,16,0,1 +ExtBfwDl1=48,1,0,0,16,0,1 +ExtBfwDl2=48,1,0,0,16,0,1 +ExtBfwDl3=48,1,0,0,16,0,1 +ExtBfwDl4=48,1,0,0,16,0,1 +ExtBfwDl5=33,1,0,0,16,0,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=48,1,0,0,16,0,1 +ExtBfwUl1=48,1,0,0,16,0,1 +ExtBfwUl2=48,1,0,0,16,0,1 +ExtBfwUl3=48,1,0,0,16,0,1 +ExtBfwUl4=48,1,0,0,16,0,1 +ExtBfwUl5=33,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us + +# Time by which the packet should be transmitted in advance for a far distant RU +adv_tx_time=0 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du.cfg new file mode 100644 index 0000000..ff8935c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=2 #core for main() +systemCore=2 +ioCore=16 # core id +ioWorker=0x00000000000E0000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du2.cfg new file mode 100644 index 0000000..76d0cf3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx.cfg new file mode 100644 index 0000000..a193911 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0xF0 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=15306 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU0 +oXuCfgFile2=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx2.cfg new file mode 100644 index 0000000..46a4a86 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_du_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0xF0 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=15306 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du_1.dat #O-DU0 +oXuCfgFile2=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru.cfg new file mode 100644 index 0000000..7e04ad0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +ioWorker=0x000000F800000000 # mask [0- no workers] +#ioWorker=0xC00000000FC000 # mask [0- no workers] # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru2.cfg new file mode 100644 index 0000000..dfcb062 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 +ioWorker_64_127=0x0000 + +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=12228 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru_1.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx.cfg new file mode 100644 index 0000000..6a1c2b2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml +ioWorker_64_127=0x0000 +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU0 +oXuCfgFile2=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx2.cfg new file mode 100644 index 0000000..4caa787 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3523/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x300000000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU0 +oXuCfgFile2=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du.dat new file mode 100644 index 0000000..4ac8785 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du.dat @@ -0,0 +1,264 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du_tst377.dat new file mode 100644 index 0000000..aeab7a7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_du_tst377.dat @@ -0,0 +1,267 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Component Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX antennas on DL UE side +UlLayersPerUe=1 #number of TX antennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru.dat new file mode 100644 index 0000000..6d097e8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru.dat @@ -0,0 +1,314 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru_tst377.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru_tst377.dat new file mode 100644 index 0000000..1180235 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_o_ru_tst377.dat @@ -0,0 +1,313 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst377.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst377.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst377.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst377.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst377.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst377.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst377.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst377.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./avg_txconfig_1.cfg +#SlotNumTx1=./avg_txconfig_1.cfg +#SlotNumTx2=./avg_txconfig_1.cfg +#SlotNumTx3=./avg_txconfig_2.cfg +#SlotNumTx4=./avg_txconfig_0.cfg + +#SlotNumTx5=./avg_txconfig_1.cfg +#SlotNumTx6=./avg_txconfig_1.cfg +#SlotNumTx7=./avg_txconfig_1.cfg +#SlotNumTx8=./avg_txconfig_2.cfg +#SlotNumTx9=./avg_txconfig_0.cfg + +#SlotNumRx0=./avg_rxconfig_0.cfg +#SlotNumRx1=./avg_rxconfig_0.cfg +#SlotNumRx2=./avg_rxconfig_0.cfg +#SlotNumRx3=./avg_rxconfig_2.cfg +#SlotNumRx4=./avg_rxconfig_1.cfg + +#SlotNumRx5=./avg_rxconfig_0.cfg +#SlotNumRx6=./avg_rxconfig_0.cfg +#SlotNumRx7=./avg_rxconfig_0.cfg +#SlotNumRx8=./avg_rxconfig_3.cfg +#SlotNumRx9=./avg_rxconfig_1.cfg + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_0.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_0.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_1.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_1.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_2.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_2.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_3.cfg new file mode 100644 index 0000000..1143077 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_rxconfig_3.cfg @@ -0,0 +1,31 @@ +nPrbElemUl=4 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=10,4,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_0.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_0.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_1.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_1.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_2.cfg new file mode 100644 index 0000000..1f4514c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/avg_txconfig_2.cfg @@ -0,0 +1,32 @@ +nPrbElemDl=4 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,34,0,14,3,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=10,4,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_du.dat new file mode 100644 index 0000000..3252c80 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_ru.dat new file mode 100644 index 0000000..771d4a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/config_file_o_ru.dat @@ -0,0 +1,272 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=10 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du.dat new file mode 100644 index 0000000..8368424 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du.dat @@ -0,0 +1,304 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du_tst376.dat new file mode 100644 index 0000000..fd40fda --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_du_tst376.dat @@ -0,0 +1,307 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru.dat new file mode 100644 index 0000000..15bae02 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru.dat @@ -0,0 +1,352 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=1 # (1<<13) symbol used for SRS (def: sym 13) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru_tst376.dat new file mode 100644 index 0000000..98487ac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_o_ru_tst376.dat @@ -0,0 +1,355 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst376.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst376.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst376.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst376.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst376.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst376.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst376.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst376.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_0.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_0.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_1.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_1.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_2.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_2.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_3.cfg new file mode 100644 index 0000000..41d084a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_rxconfig_3.cfg @@ -0,0 +1,34 @@ +nPrbElemUl=6 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f + +# 0-63 AntC +PrbElemUlAntCMask0=ffffffffffffffff +PrbElemUlAntCMask1=ffffffffffffffff +PrbElemUlAntCMask2=ffffffffffffffff +PrbElemUlAntCMask3=ffffffffffffffff +PrbElemUlAntCMask4=ffffffffffffffff +PrbElemUlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=12,4,0,0,9,1 +ExtBfwUl1=12,4,0,0,9,1 +ExtBfwUl2=12,4,0,0,9,1 +ExtBfwUl3=12,4,0,0,9,1 +ExtBfwUl4=12,4,0,0,9,1 +ExtBfwUl5=11,3,0,0,9,1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_0.cfg new file mode 100644 index 0000000..b705198 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_0.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs S +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_1.cfg new file mode 100644 index 0000000..9359005 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_1.cfg @@ -0,0 +1,35 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_2.cfg new file mode 100644 index 0000000..6184512 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/peak_txconfig_2.cfg @@ -0,0 +1,36 @@ +nPrbElemDl=6 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f + +# 0-63 AntC +PrbElemDlAntCMask0=ffffffffffffffff +PrbElemDlAntCMask1=ffffffffffffffff +PrbElemDlAntCMask2=ffffffffffffffff +PrbElemDlAntCMask3=ffffffffffffffff +PrbElemDlAntCMask4=ffffffffffffffff +PrbElemDlAntCMask5=ffffffffffffffff + + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=12,4,0,0,9,1 +ExtBfwDl1=12,4,0,0,9,1 +ExtBfwDl2=12,4,0,0,9,1 +ExtBfwDl3=12,4,0,0,9,1 +ExtBfwDl4=12,4,0,0,9,1 +ExtBfwDl5=11,3,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du.cfg new file mode 100644 index 0000000..8f5695c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=22 # core id +ioWorker=0xE00000C00000 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du2.cfg new file mode 100644 index 0000000..1e77d87 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_csx.cfg new file mode 100644 index 0000000..4d9f87d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_csx.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_icx2.cfg new file mode 100644 index 0000000..1e77d87 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 # mask [0- no workers] + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./avg_o_du_tst377.dat #O-DU1 +oXuCfgFile2=./avg_o_du_tst377.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru.cfg new file mode 100644 index 0000000..4f22496 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # second socket + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru2.cfg new file mode 100644 index 0000000..9e3c469 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] //24,25,26,27,28 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_csx.cfg new file mode 100644 index 0000000..8ee5ce3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_csx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E0000000 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_icx2.cfg new file mode 100644 index 0000000..06d068b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3531/usecase_ru_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +# 3501 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % +# TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 Avg: 36 % + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] //24,25,26,27,28 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./avg_o_ru_tst377.dat #O-RU1 +oXuCfgFile2=./avg_o_ru_tst377.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..1ea2697 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 24 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..184045d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 16384 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 24 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..e4b8363 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..f4b2b8f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 26 + + 24 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..d386812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..d386812 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..f394c31 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 16 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_du.dat new file mode 100755 index 0000000..4ff5768 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_du.dat @@ -0,0 +1,304 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_ru.dat new file mode 100755 index 0000000..9243bb4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/config_file_o_ru.dat @@ -0,0 +1,345 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +extType=1 +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,17,0,14,0,1,1,9,1 +PrbElemDl1=17,17,0,14,1,1,1,9,1 +PrbElemDl2=34,17,0,14,2,1,1,9,1 +PrbElemDl3=51,17,0,14,3,1,1,9,1 +PrbElemDl4=68,17,0,14,4,1,1,9,1 +PrbElemDl5=85,17,0,14,5,1,1,9,1 +PrbElemDl6=102,17,0,14,6,1,1,9,1 +PrbElemDl7=119,17,0,14,7,1,1,9,1 +PrbElemDl8=136,17,0,14,8,1,1,9,1 +PrbElemDl9=153,17,0,14,9,1,1,9,1 +PrbElemDl10=170,17,0,14,10,1,1,9,1 +PrbElemDl11=187,17,0,14,11,1,1,9,1 +PrbElemDl12=204,17,0,14,12,1,1,9,1 +PrbElemDl13=221,17,0,14,13,1,1,9,1 +PrbElemDl14=238,17,0,14,14,1,1,9,1 +PrbElemDl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType +ExtBfwDl0=17,1,0,0,16,0,1 +ExtBfwDl1=17,1,0,0,16,0,1 +ExtBfwDl2=17,1,0,0,16,0,1 +ExtBfwDl3=17,1,0,0,16,0,1 +ExtBfwDl4=17,1,0,0,16,0,1 +ExtBfwDl5=17,1,0,0,16,0,1 +ExtBfwDl6=17,1,0,0,16,0,1 +ExtBfwDl7=17,1,0,0,16,0,1 +ExtBfwDl8=17,1,0,0,16,0,1 +ExtBfwDl9=17,1,0,0,16,0,1 +ExtBfwDl10=17,1,0,0,16,0,1 +ExtBfwDl11=17,1,0,0,16,0,1 +ExtBfwDl12=17,1,0,0,16,0,1 +ExtBfwDl13=17,1,0,0,16,0,1 +ExtBfwDl14=17,1,0,0,16,0,1 +ExtBfwDl15=18,1,0,0,16,0,1 + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams + +PrbElemUl0=0,17,0,14,0,1,1,9,1 +PrbElemUl1=17,17,0,14,1,1,1,9,1 +PrbElemUl2=34,17,0,14,2,1,1,9,1 +PrbElemUl3=51,17,0,14,3,1,1,9,1 +PrbElemUl4=68,17,0,14,4,1,1,9,1 +PrbElemUl5=85,17,0,14,5,1,1,9,1 +PrbElemUl6=102,17,0,14,6,1,1,9,1 +PrbElemUl7=119,17,0,14,7,1,1,9,1 +PrbElemUl8=136,17,0,14,8,1,1,9,1 +PrbElemUl9=153,17,0,14,9,1,1,9,1 +PrbElemUl10=170,17,0,14,10,1,1,9,1 +PrbElemUl11=187,17,0,14,11,1,1,9,1 +PrbElemUl12=204,17,0,14,12,1,1,9,1 +PrbElemUl13=221,17,0,14,13,1,1,9,1 +PrbElemUl14=238,17,0,14,14,1,1,9,1 +PrbElemUl15=255,18,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType + +ExtBfwUl0=17,1,0,0,16,0,1 +ExtBfwUl1=17,1,0,0,16,0,1 +ExtBfwUl2=17,1,0,0,16,0,1 +ExtBfwUl3=17,1,0,0,16,0,1 +ExtBfwUl4=17,1,0,0,16,0,1 +ExtBfwUl5=17,1,0,0,16,0,1 +ExtBfwUl6=17,1,0,0,16,0,1 +ExtBfwUl7=17,1,0,0,16,0,1 +ExtBfwUl8=17,1,0,0,16,0,1 +ExtBfwUl9=17,1,0,0,16,0,1 +ExtBfwUl10=17,1,0,0,16,0,1 +ExtBfwUl11=17,1,0,0,16,0,1 +ExtBfwUl12=17,1,0,0,16,0,1 +ExtBfwUl13=17,1,0,0,16,0,1 +ExtBfwUl14=17,1,0,0,16,0,1 +ExtBfwUl15=18,1,0,0,16,0,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du.cfg new file mode 100644 index 0000000..9f78cb4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=16 # core id +ioWorker=0x00000000000E0000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +#dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du2.cfg new file mode 100644 index 0000000..d6586b8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +#dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU1 +oXuCfgFile2=./config_file_o_du.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx.cfg new file mode 100644 index 0000000..0eda58e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=7 # core id +ioWorker=0x700 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 +oXuCfgFile2=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx2.cfg new file mode 100644 index 0000000..77c50e5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_du_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-DU0 +oXuCfgFile1=./config_file_o_du.dat #O-DU0 +oXuCfgFile2=./config_file_o_du.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru.cfg new file mode 100644 index 0000000..c3c76cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id + +ioWorker=0x000003F800000000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru2.cfg new file mode 100644 index 0000000..a0ec540 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x3F800000 # mask [0- no workers] +ioWorker_64_127=0x0000 +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +oXuCfgFile1=./config_file_o_ru.dat #O-RU1 +oXuCfgFile2=./config_file_o_ru.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx.cfg new file mode 100644 index 0000000..b23ce67 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx2.cfg new file mode 100644 index 0000000..e594b45 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/354/usecase_ru_icx2.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=16384 #8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..90846ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 10 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..5b38a19 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 10 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..9f16c1b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..2d95064 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..133d74e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c643682 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..ea1897a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 3 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_du_tst376.dat new file mode 100755 index 0000000..5983c27 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_du_tst376.dat @@ -0,0 +1,261 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +csirsAntC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +csirsAntC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +csirsAntC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +csirsAntC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +csirsAntC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +csirsAntC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +csirsAntC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +csirsAntC7=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_ru_tst376.dat new file mode 100644 index 0000000..0bdb126 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/peak_o_ru_tst376.dat @@ -0,0 +1,302 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +#CSI-RS config parameters +csirsEnable=1 +nCSIports=8 #number of CSI-RS ports + +nPrbElemCsirs=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemCsirs0=0,273,4,1,0,0,1,9,0 +PrbElemCsirs1=0,273,5,1,0,0,1,9,0 +PrbElemCsirs2=0,273,6,1,0,0,1,9,0 +PrbElemCsirs3=0,273,7,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du.cfg index a50bbe2..8a7a82a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du.cfg @@ -15,18 +15,24 @@ # limitations under the License. # #******************************************************************************/ - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=20 #core for main() -systemCore=22 -ioCore=28 # core id +mainCore=0 #core for main() +systemCore=2 +ioCore=16 # core id #ioWorker=0x000000000 # mask [0- no workers] -#ioWorker=0x8000040000 # mask [0- no workers] -ioWorker=0x060000000 # mask [0- no workers] +# ioWorker=0x8000040000 # mask [0- no workers] +# ioWorker=0x200000000 # mask [0- no workers] #ioWorker=0x700000600 +#ioWorker=0x78 # mask [0- no workers] +ioWorker=0x00000000000E0000 #mask [0- no workers] + + +# oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +# dlCpProcBurst=1 dpdkMemorySize=16384 iovaMode=0 @@ -37,14 +43,14 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./peak_o_du.dat #O-DU0 -oXuCfgFile1=./peak_o_du.dat #O-DU1 -oXuCfgFile2=./peak_o_du.dat #O-DU2 +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 oXuRem0Mac1=00:11:22:33:00:11 - # remote O-XU 0 Eth Link 1 oXuRem0Mac2=00:11:22:33:00:21 oXuRem0Mac3=00:11:22:33:00:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du2.cfg new file mode 100644 index 0000000..a711cb8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +# dlCpProcBurst=1 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx.cfg index 9210c6f..9644333 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx.cfg @@ -15,17 +15,17 @@ # limitations under the License. # #******************************************************************************/ - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=8 # core id - -ioWorker=0x200 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=16384 iovaMode=0 @@ -35,9 +35,10 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./peak_o_du.dat #O-DU0 -oXuCfgFile1=./peak_o_du.dat #O-DU1 -oXuCfgFile2=./peak_o_du.dat #O-DU2 + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx2.cfg new file mode 100644 index 0000000..acf3781 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_du_icx2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru.cfg index e6f4789..2528cd9 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru.cfg @@ -17,16 +17,17 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id #ioWorker=0x800000000 # mask [0- no workers] #ioWorker=0x800004000 # mask [0- no workers] #ioWorker=0xc000000 # second socket -ioWorker=0x3E00 # second socket +ioWorker=0x000000F800000000 # second socket +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml dpdkMemorySize=16384 iovaMode=0 @@ -37,9 +38,9 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./peak_o_ru.dat #O-RU0 -oXuCfgFile1=./peak_o_ru.dat #O-RU1 -oXuCfgFile2=./peak_o_ru.dat #O-RU2 +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru2.cfg new file mode 100644 index 0000000..8304ba3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru2.cfg @@ -0,0 +1,66 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x1F000000 # mask [0- no workers] +# oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx.cfg index 51dacfe..62807f4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx.cfg @@ -17,15 +17,13 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments - +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== appMode=1 # All O-DU(0) | O-RU(1) -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() -systemCore=2 -ioCore=8 # core id - -ioWorker=0x3E00 # second socket - +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] dpdkMemorySize=16384 iovaMode=0 @@ -35,9 +33,9 @@ oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs -oXuCfgFile0=./peak_o_ru.dat #O-RU0 -oXuCfgFile1=./peak_o_ru.dat #O-RU1 -oXuCfgFile2=./peak_o_ru.dat #O-RU2 +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx2.cfg new file mode 100644 index 0000000..44ea543 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/384/usecase_ru_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_du_tst376.dat new file mode 100755 index 0000000..99767b2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_du_tst376.dat @@ -0,0 +1,250 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_ru_tst376.dat new file mode 100755 index 0000000..3130898 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/peak_o_ru_tst376.dat @@ -0,0 +1,300 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + +#TODO: +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du.cfg new file mode 100755 index 0000000..a3ca0e4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x060000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du2.cfg new file mode 100644 index 0000000..16c4e00 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx.cfg new file mode 100755 index 0000000..b2faf6f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id + +ioWorker=0x200 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx2.cfg new file mode 100644 index 0000000..9746081 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_du_icx2.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru.cfg new file mode 100755 index 0000000..39fb937 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E00 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru2.cfg new file mode 100644 index 0000000..aaa92eb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx.cfg new file mode 100755 index 0000000..8ba560a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx.cfg @@ -0,0 +1,61 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id + +ioWorker=0x3E00 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx2.cfg new file mode 100644 index 0000000..636886e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/3843/usecase_ru_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_du.dat new file mode 100644 index 0000000..6b10e26 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS +srsSym=8192 # deprecated + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 +PrbElemDl4=144,36,0,14,5,1,1,9,1 +PrbElemDl5=180,36,0,14,6,1,1,9,1 +PrbElemDl6=216,36,0,14,7,1,1,9,1 +PrbElemDl7=252,21,0,14,8,1,1,9,1 +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +PrbElemUl2=72,36,0,14,3,1,1,9,1 +PrbElemUl3=108,36,0,14,4,1,1,9,1 +PrbElemUl4=144,36,0,14,5,1,1,9,1 +PrbElemUl5=180,36,0,14,6,1,1,9,1 +PrbElemUl6=216,36,0,14,7,1,1,9,1 +PrbElemUl7=252,21,0,14,8,1,1,9,1 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_ru.dat new file mode 100644 index 0000000..664bfca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/config_file_o_ru.dat @@ -0,0 +1,257 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDSUUDDDD, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS +srsSym=8192 # deprecated + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=4 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,1,1,1,9,1 +PrbElemDl1=48,48,0,14,2,1,1,9,1 +PrbElemDl2=96,48,0,14,3,1,1,9,1 +PrbElemDl3=144,48,0,14,4,1,1,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,1,1,1,9,1 +PrbElemUl1=48,48,0,14,2,1,1,9,1 +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du.cfg new file mode 100644 index 0000000..82f201e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du_icx2.cfg new file mode 100644 index 0000000..97954cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru.cfg new file mode 100644 index 0000000..03c6fdc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru2.cfg new file mode 100644 index 0000000..1e6db3e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c41b3cd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_du.dat index 72f078e..553ec20 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,8 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF @@ -200,39 +197,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_ru.dat index 39b8149..d928adf 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/config_file_o_ru.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -61,7 +60,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF @@ -236,39 +234,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du_icx2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru.cfg index b5fd930..13d6e64 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=8 # core id ioWorker=0x10000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru2.cfg new file mode 100644 index 0000000..2340acb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru_icx2.cfg new file mode 100644 index 0000000..44b204b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/401/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_du.dat new file mode 100644 index 0000000..5f74dbc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_du.dat @@ -0,0 +1,235 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,128,0,14,0,1,1,9,1 +PrbElemDl1=128,128,0,14,1,1,1,9,1 +PrbElemDl2=256,17,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,64,0,0,9,1 +ExtBfwDl1=2,64,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,128,0,14,0,1,1,9,1 +PrbElemUl1=128,128,0,14,1,1,1,9,1 +PrbElemUl2=256,17,0,14,2,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,64,0,0,9,1 +ExtBfwUl1=2,64,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_ru.dat new file mode 100644 index 0000000..1915dfa --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/config_file_o_ru.dat @@ -0,0 +1,272 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:00 # asigned MAC of O-DU VF +duMac1=00:11:22:33:44:10 # asigned MAC of O-DU VF + +ruMac0=00:11:22:33:44:01 # O-RU VF for O-RU app +ruMac1=00:11:22:33:44:11 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:20 # asigned MAC of O-DU VF +duMac3=00:11:22:33:44:30 # asigned MAC of O-DU VF + +ruMac2=00:11:22:33:44:21 # O-RU VF for O-RU app +ruMac3=00:11:22:33:44:31 # O-RU VF for O-RU app + +# Eth 1 +duMac4=00:11:22:33:44:40 # asigned MAC of O-DU VF +duMac5=00:11:22:33:44:50 # asigned MAC of O-DU VF +ruMac4=00:11:22:33:44:41 # O-RU VF for O-RU app +ruMac5=00:11:22:33:44:51 # O-RU VF for O-RU app + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,128,0,14,0,1,1,9,1 +PrbElemDl1=128,128,0,14,1,1,1,9,1 +PrbElemDl2=256,17,0,14,2,1,1,9,1 + +nPrbElemUl=3 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,128,0,14,0,1,1,9,1 +PrbElemUl1=128,128,0,14,1,1,1,9,1 +PrbElemUl2=256,17,0,14,2,1,1,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du.cfg new file mode 100644 index 0000000..281607d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du_icx2.cfg new file mode 100644 index 0000000..32b229e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_du_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru.cfg new file mode 100644 index 0000000..13d6e64 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x10000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru2.cfg new file mode 100644 index 0000000..2340acb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru_icx2.cfg new file mode 100644 index 0000000..44b204b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/411/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_du_tst376.dat new file mode 100755 index 0000000..7654dcb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_du_tst376.dat @@ -0,0 +1,236 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_ru_tst376.dat new file mode 100644 index 0000000..94987a3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/peak_o_ru_tst376.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du.cfg new file mode 100644 index 0000000..14e2d57 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x300000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du2.cfg new file mode 100644 index 0000000..fd39aed --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du2.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x30 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx.cfg new file mode 100644 index 0000000..d5cf7a9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x200 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx2.cfg new file mode 100644 index 0000000..c87a9e5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru.cfg new file mode 100644 index 0000000..6612c92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x3E00 # second socket + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:d8 +# oXuRem0Mac1=b4:96:91:94:dd:d9 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru2.cfg new file mode 100644 index 0000000..08fff0a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:d8 +# oXuRem0Mac1=b4:96:91:94:dd:d9 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx.cfg new file mode 100644 index 0000000..e6a0083 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x3E00 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx2.cfg new file mode 100644 index 0000000..444d9c1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/421/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..9c1164b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 14 + + 4,44,5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1875ea3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 2 + + 14 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..edefa7e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,37,6,38,7,39,8,40,9,41,10,42 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..35b7ee2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 10 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..67c718d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 23,63,24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..bb73f25 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..eb18359 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 21 + + 1 + + 22 + + 8 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 4 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_du_tst376.dat new file mode 100755 index 0000000..7654dcb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_du_tst376.dat @@ -0,0 +1,236 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_ru_tst376.dat new file mode 100755 index 0000000..94987a3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/peak_o_ru_tst376.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +#antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +#antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +#antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +#antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du.cfg new file mode 100755 index 0000000..a35f0af --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=1 +ioCore=16 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x0000000000080000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du2.cfg new file mode 100644 index 0000000..51af94e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx.cfg new file mode 100755 index 0000000..7ff9d5d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id + +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx2.cfg new file mode 100644 index 0000000..232c343 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_du_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] //4 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru.cfg new file mode 100755 index 0000000..e8195eb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 #core for main() +systemCore=20 +ioCore=34 # core id +# ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x40 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru2.cfg new file mode 100644 index 0000000..10a2f88 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] //24 + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx.cfg new file mode 100755 index 0000000..8eb37ba --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id + +ioWorker=0x7E00000 # second socket +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx2.cfg new file mode 100644 index 0000000..a236cfd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4424/usecase_ru_icx2.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x3F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_du_tst376.dat new file mode 100755 index 0000000..99767b2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_du_tst376.dat @@ -0,0 +1,250 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +#UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_ru_tst376.dat new file mode 100755 index 0000000..3130898 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/peak_o_ru_tst376.dat @@ -0,0 +1,300 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#SlotNumTx0=./peak_txconfig_1.cfg +#SlotNumTx1=./peak_txconfig_1.cfg +#SlotNumTx2=./peak_txconfig_1.cfg +#SlotNumTx3=./peak_txconfig_2.cfg +#SlotNumTx4=./peak_txconfig_0.cfg + +#SlotNumTx5=./peak_txconfig_1.cfg +#SlotNumTx6=./peak_txconfig_1.cfg +#SlotNumTx7=./peak_txconfig_1.cfg +#SlotNumTx8=./peak_txconfig_2.cfg +#SlotNumTx9=./peak_txconfig_0.cfg + +#SlotNumRx0=./peak_rxconfig_0.cfg +#SlotNumRx1=./peak_rxconfig_0.cfg +#SlotNumRx2=./peak_rxconfig_0.cfg +#SlotNumRx3=./peak_rxconfig_2.cfg +#SlotNumRx4=./peak_rxconfig_1.cfg + +#SlotNumRx5=./peak_rxconfig_0.cfg +#SlotNumRx6=./peak_rxconfig_0.cfg +#SlotNumRx7=./peak_rxconfig_0.cfg +#SlotNumRx8=./peak_rxconfig_3.cfg +#SlotNumRx9=./peak_rxconfig_1.cfg + + +#TODO: +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +#antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +#antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +#antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +#antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +#antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +#antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +#antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +#antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +#antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +#antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +#antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +#antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +#antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +#antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +#antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +#antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du.cfg new file mode 100755 index 0000000..a938d5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x060000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du2.cfg new file mode 100644 index 0000000..1d14070 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx.cfg new file mode 100755 index 0000000..97015f8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x200 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx2.cfg new file mode 100644 index 0000000..8384d96 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_du_icx2.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile1=./peak_o_du_tst376.dat #O-DU1 +oXuCfgFile2=./peak_o_du_tst376.dat #O-DU2 +oXuCfgFile3=./peak_o_du_tst376.dat #O-DU3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:01 +oXuRem3Mac1=00:11:22:33:03:11 + +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:21 +oXuRem3Mac3=00:11:22:33:03:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru.cfg new file mode 100755 index 0000000..b19e161 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x7E00 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +#TODO:Will need changes in MAC addresses +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru2.cfg new file mode 100644 index 0000000..570414a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru2.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments + +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x1F800000 # mask [0- no workers] //24,25,26,27,28,29 + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +#TODO:Will need changes in MAC addresses +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx.cfg new file mode 100755 index 0000000..6515ca8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +ioWorker=0x7E00 # second socket + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +#TODO:Will need changes in MAC addresses +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b1759d3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/4844/usecase_ru_icx2.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x3F00000000 # mask [0- no workers] + +dpdkMemorySize=16384 +iovaMode=0 + +oXuNum=4 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 +oXuCfgFile1=./peak_o_ru_tst376.dat #O-RU1 +oXuCfgFile2=./peak_o_ru_tst376.dat #O-RU2 +oXuCfgFile3=./peak_o_ru_tst376.dat #O-RU3 + +#TODO:Will need changes in MAC addresses +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_du.dat index 31dc2d3..24576da 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -246,39 +245,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_ru.dat index d4855fa..6318ac7 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/config_file_o_ru.dat @@ -18,10 +18,9 @@ #Peak: 100 % #301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % - + # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -293,39 +292,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du.cfg index 9b90a1c..ad650b4 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id #ioWorker=0xE00000C00000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du2.cfg new file mode 100644 index 0000000..4bdda35 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +#ioWorker=0xE00000C00000 # mask [0- no workers] +ioWorker=0x1F0 +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx.cfg new file mode 100644 index 0000000..a17894d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0x200000000000 # mask [0- no workers] +ioWorker=0xE00000C00000 # mask [0- no workers] +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx2.cfg new file mode 100644 index 0000000..3f7cb44 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +#ioWorker=0x200000000000 # mask [0- no workers] +ioWorker=0x1F0 +ioWorker=0x200 # mask [0- no workers] +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru.cfg index 6aa5aad..367bc0b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru2.cfg new file mode 100644 index 0000000..c8295e4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru_icx2.cfg new file mode 100644 index 0000000..c8295e4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/501/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_du.dat index 95889ef..f6324ea 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_du.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_ru.dat index 1f8bb41..df82af6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/config_file_o_ru.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -251,39 +250,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx.cfg new file mode 100644 index 0000000..59657d6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/502/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_du.dat index 62d6cab..2efd43d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -206,39 +205,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_ru.dat index fe55652..5464032 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/config_file_o_ru.dat @@ -16,21 +16,20 @@ # #******************************************************************************/ -#NC +#NC #12% #303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/503/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_du.dat index 3523948..a3c87f8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_du.dat @@ -21,7 +21,6 @@ #304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_ru.dat index 69486f0..f93c01a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/config_file_o_ru.dat @@ -21,7 +21,6 @@ #304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -255,39 +254,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/504/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_du.dat index c1a5789..15e788d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -206,39 +205,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_ru.dat index bd3a72b..26f631e 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/config_file_o_ru.dat @@ -21,7 +21,6 @@ #305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -250,39 +249,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/505/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_du.dat index c15f5a3..7d540cd 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_du.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -207,39 +206,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_ru.dat index 013f06e..197837c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/config_file_o_ru.dat @@ -21,12 +21,11 @@ #306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/506/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_du.dat index 50e9060..2d203ff 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -246,39 +245,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_ru.dat index a9ef82a..33bda61 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/config_file_o_ru.dat @@ -18,10 +18,9 @@ #Peak: 100 % #311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % - + # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -293,39 +292,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du.cfg index 81c8cff..1745efb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id #ioWorker=0xE00000C00000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du2.cfg new file mode 100644 index 0000000..cb4178c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +#ioWorker=0xE00000C00000 # mask [0- no workers] +ioWorker=0x1F0 + +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx.cfg new file mode 100644 index 0000000..2732d63 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=21 # core id +ioWorker=0xE00000C00000 # mask [0- no workers] +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx2.cfg new file mode 100644 index 0000000..a947d94 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 + +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru2.cfg new file mode 100644 index 0000000..cd6b132 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] //24,25,26,27,28 + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/511/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_du.dat index b49ff59..fb8b7cb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_du.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_ru.dat index 4063bb3..7794238 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/config_file_o_ru.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx.cfg new file mode 100644 index 0000000..e781967 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/512/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_du.dat index 6dc7486..ab202b1 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -206,39 +205,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_ru.dat index 9705708..af37a78 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/config_file_o_ru.dat @@ -16,21 +16,20 @@ # #******************************************************************************/ -#NC +#NC #12% #313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/513/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_du.dat index ffdb267..0b3fe28 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_du.dat @@ -21,7 +21,6 @@ #314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_ru.dat index 2df68f1..c43f39c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/config_file_o_ru.dat @@ -21,16 +21,15 @@ #314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/514/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_du.dat index 8169e94..8de1b6f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_du.dat @@ -22,7 +22,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -206,39 +205,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_ru.dat index 55c78cd..bf7020a 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/config_file_o_ru.dat @@ -21,7 +21,6 @@ #315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/515/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_du.dat index 86e9829..c8a836c 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_du.dat @@ -23,7 +23,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -207,39 +206,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_ru.dat index fb63025..1a9ca9b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/config_file_o_ru.dat @@ -21,16 +21,15 @@ #316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx.cfg new file mode 100644 index 0000000..3bb6079 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=0 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx2.cfg new file mode 100644 index 0000000..f4925f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/516/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_du.dat new file mode 100644 index 0000000..2d43636 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_du.dat @@ -0,0 +1,225 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_ru.dat new file mode 100644 index 0000000..0c676b3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/config_file_o_ru.dat @@ -0,0 +1,274 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/601/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..00d32f5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx.xml index 8068127..0cbca55 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx.xml @@ -41,11 +41,11 @@ 1 - 6 + 8 - 4 + 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,21,53,22,54,23,55,24,56,25,57,26,58 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..0afe60f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 8 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru.xml index 8068127..36e0bfb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..2c648c4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b2609db --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_du.dat new file mode 100644 index 0000000..8399054 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_du.dat @@ -0,0 +1,208 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_ru.dat new file mode 100644 index 0000000..a805186 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/config_file_o_ru.dat @@ -0,0 +1,252 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak +#4% +#302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du.cfg new file mode 100644 index 0000000..ee13640 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du2.cfg new file mode 100644 index 0000000..0882bb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx.cfg index 95f2781..c602670 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=10 # core id +ioWorker=0x40000000000 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru.cfg new file mode 100644 index 0000000..e094b80 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru.cfg @@ -0,0 +1,52 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru2.cfg new file mode 100644 index 0000000..25c3b92 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru_icx2.cfg new file mode 100644 index 0000000..57739f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/602/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_du.dat new file mode 100644 index 0000000..965cf05 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_du.dat @@ -0,0 +1,209 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_ru.dat new file mode 100644 index 0000000..e15afd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/config_file_o_ru.dat @@ -0,0 +1,252 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du.cfg new file mode 100644 index 0000000..d59e86f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() + +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/603/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_du.dat new file mode 100644 index 0000000..0876a43 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_ru.dat new file mode 100644 index 0000000..7dc33f7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/config_file_o_ru.dat @@ -0,0 +1,268 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/604/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_du.dat new file mode 100644 index 0000000..c2bc2e7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_du.dat @@ -0,0 +1,209 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_ru.dat new file mode 100644 index 0000000..431489f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/config_file_o_ru.dat @@ -0,0 +1,253 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/605/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_du.dat new file mode 100644 index 0000000..050869c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_du.dat @@ -0,0 +1,210 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_ru.dat new file mode 100644 index 0000000..89340d5 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/config_file_o_ru.dat @@ -0,0 +1,252 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du.cfg new file mode 100644 index 0000000..d59e86f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() + +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/606/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_du.dat new file mode 100644 index 0000000..cdee26e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_du.dat @@ -0,0 +1,225 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_ru.dat new file mode 100644 index 0000000..9a8877a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/config_file_o_ru.dat @@ -0,0 +1,274 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,48,0,14,0,1,1,9,1 +PrbElemDl1=48,48,0,14,1,1,1,9,1 +PrbElemDl2=96,48,0,14,2,1,1,9,1 +PrbElemDl3=144,48,0,14,3,1,1,9,1 +PrbElemDl4=192,48,0,14,4,1,1,9,1 +PrbElemDl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 +ExtBfwDl1=2,24,0,0,9,1 +ExtBfwDl2=2,24,0,0,9,1 +ExtBfwDl3=2,24,0,0,9,1 +ExtBfwDl4=2,24,0,0,9,1 +ExtBfwDl5=2,17,0,0,9,1 + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,48,0,14,0,1,1,9,1 +PrbElemUl1=48,48,0,14,1,1,1,9,1 +PrbElemUl2=96,48,0,14,2,1,1,9,1 +PrbElemUl3=144,48,0,14,3,1,1,9,1 +PrbElemUl4=192,48,0,14,4,1,1,9,1 +PrbElemUl5=240,33,0,14,5,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 +ExtBfwUl1=2,24,0,0,9,1 +ExtBfwUl2=2,24,0,0,9,1 +ExtBfwUl3=2,24,0,0,9,1 +ExtBfwUl4=2,24,0,0,9,1 +ExtBfwUl5=2,17,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/611/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du.xml index 8068127..a5ac726 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 4 - 4 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..a14c766 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 4 + + 10 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx.xml index 81b0e03..fa80f04 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx.xml @@ -45,7 +45,7 @@ 6 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 5,37,6,38,7,39,8,40 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..08276a4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 6 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru.xml index 8068127..64aed01 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 29 - 4 + 10 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..48949f9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx.xml new file mode 100644 index 0000000..38da3fb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 22,54,23,55,24,56,25,57,26,58,27,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..4850fb0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 29 + + 10 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_du.dat index 8b72589..71496aa 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_du.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -171,39 +170,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_ru.dat index b93a2e8..185dd8d 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/config_file_o_ru.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -55,7 +54,7 @@ sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 @@ -104,73 +103,73 @@ srsSlot=3 # scheduled SRS slot within TDD period srsNdmOffset=2 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType @@ -215,39 +214,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du.cfg index f40da1c..faebbf6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du.cfg @@ -21,8 +21,8 @@ instanceId=0 # 0,1,2,... in case more than 1 application started on the same sys mainCore=0 #core for main() systemCore=2 -ioCore=10 # core id -ioWorker=0x4000000000000 # mask [0- no workers] +ioCore=5 +ioWorker=0x0000200000000000 dpdkMemorySize=8192 oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du2.cfg new file mode 100644 index 0000000..0882bb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx.cfg index 95f2781..e2ec07f 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx.cfg @@ -19,10 +19,10 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 -ioCore=11 # core id -ioWorker=0x80000000000 # mask [0- no workers] +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml dpdkMemorySize=8192 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx2.cfg new file mode 100644 index 0000000..76ec5f6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru.cfg index 3ab240f..8e830f8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru.cfg @@ -18,8 +18,12 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +mainCore=20 +systemCore=21 # DPDK main I/O core +ioCore=22 #0x00000 00000 00004 00000) +ioWorker=0x800000 +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru2.cfg new file mode 100644 index 0000000..a69e8c9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] +ioWorker_64_127=0x0000 + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx.cfg new file mode 100644 index 0000000..925a31b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 +systemCore=19 # DPDK main I/O core +ioCore=20 #0x00000 00000 00004 00000) +ioWorker=0x200000 +ioWorker_64_127=0x0000 +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx2.cfg new file mode 100644 index 0000000..b3c777d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/612/usecase_ru_icx2.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] +ioWorker_64_127=0x0000 + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_du.dat new file mode 100644 index 0000000..2a5745e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_du.dat @@ -0,0 +1,209 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_ru.dat new file mode 100644 index 0000000..4c28f28 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/config_file_o_ru.dat @@ -0,0 +1,252 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/613/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_du.dat new file mode 100644 index 0000000..14a1560 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_du.dat @@ -0,0 +1,220 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_ru.dat new file mode 100644 index 0000000..0c9f23d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/config_file_o_ru.dat @@ -0,0 +1,268 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +# Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/614/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_du.dat new file mode 100644 index 0000000..a789e64 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_du.dat @@ -0,0 +1,209 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_ru.dat new file mode 100644 index 0000000..66a9aac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/config_file_o_ru.dat @@ -0,0 +1,253 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/615/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_du.dat new file mode 100644 index 0000000..d0a0c76 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_du.dat @@ -0,0 +1,210 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_ru.dat new file mode 100644 index 0000000..457196b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/config_file_o_ru.dat @@ -0,0 +1,252 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,1,1,9,1 +PrbElemDl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,25,0,0,9,1 +ExtBfwDl1=2,25,0,0,9,1 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,1,1,9,1 +PrbElemUl1=50,50,0,14,1,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,25,0,0,9,1 +ExtBfwUl1=2,25,0,0,9,1 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du.cfg new file mode 100644 index 0000000..f18662b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du_icx2.cfg new file mode 100644 index 0000000..22a9e48 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_du_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru.cfg new file mode 100644 index 0000000..3ab240f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru.cfg @@ -0,0 +1,51 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru2.cfg new file mode 100644 index 0000000..e5b3fbf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru_icx2.cfg new file mode 100644 index 0000000..58c1b4a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/616/usecase_ru_icx2.cfg @@ -0,0 +1,53 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..80b46a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,4,36,5,37, + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..ea0b2ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..5643294 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_du_tst451.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_du_tst451.dat new file mode 100644 index 0000000..edafe3f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_du_tst451.dat @@ -0,0 +1,420 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDDDDDSUU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 +antC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_1.cfg +SlotNumTx4=./slot_tx_1.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_2.cfg +SlotNumTx8=./slot_tx_0.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_1.cfg +SlotNumTx14=./slot_tx_1.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_2.cfg +SlotNumTx18=./slot_tx_0.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_0.cfg +SlotNumRx4=./slot_rx_0.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_1.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_0.cfg +SlotNumRx14=./slot_rx_0.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_1.cfg +SlotNumRx19=./slot_rx_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +DlBfwUe16=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe17=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe18=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe19=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe20=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe21=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe22=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe23=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe24=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe25=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe26=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe27=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe28=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe29=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe30=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe31=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +UlBfwUe16=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe17=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe18=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe19=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe20=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe21=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe22=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe23=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe24=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe25=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe26=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe27=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe28=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe29=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe30=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe31=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=7 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./ant_srs_0.bin +antSrsC1=./ant_srs_1.bin +antSrsC2=./ant_srs_2.bin +antSrsC3=./ant_srs_3.bin +antSrsC4=./ant_srs_4.bin +antSrsC5=./ant_srs_5.bin +antSrsC6=./ant_srs_6.bin +antSrsC7=./ant_srs_7.bin +antSrsC8=./ant_srs_8.bin +antSrsC9=./ant_srs_9.bin +antSrsC10=./ant_srs_10.bin +antSrsC11=./ant_srs_11.bin +antSrsC12=./ant_srs_12.bin +antSrsC13=./ant_srs_13.bin +antSrsC14=./ant_srs_14.bin +antSrsC15=./ant_srs_15.bin +antSrsC16=./ant_srs_16.bin +antSrsC17=./ant_srs_17.bin +antSrsC18=./ant_srs_18.bin +antSrsC19=./ant_srs_19.bin +antSrsC20=./ant_srs_20.bin +antSrsC21=./ant_srs_21.bin +antSrsC22=./ant_srs_22.bin +antSrsC23=./ant_srs_23.bin +antSrsC24=./ant_srs_24.bin +antSrsC25=./ant_srs_25.bin +antSrsC26=./ant_srs_26.bin +antSrsC27=./ant_srs_27.bin +antSrsC28=./ant_srs_28.bin +antSrsC29=./ant_srs_29.bin +antSrsC30=./ant_srs_30.bin +antSrsC31=./ant_srs_31.bin +antSrsC32=./ant_srs_32.bin +antSrsC33=./ant_srs_33.bin +antSrsC34=./ant_srs_34.bin +antSrsC35=./ant_srs_35.bin +antSrsC36=./ant_srs_36.bin +antSrsC37=./ant_srs_37.bin +antSrsC38=./ant_srs_38.bin +antSrsC39=./ant_srs_39.bin +antSrsC40=./ant_srs_40.bin +antSrsC41=./ant_srs_41.bin +antSrsC42=./ant_srs_42.bin +antSrsC43=./ant_srs_43.bin +antSrsC44=./ant_srs_44.bin +antSrsC45=./ant_srs_45.bin +antSrsC46=./ant_srs_46.bin +antSrsC47=./ant_srs_47.bin +antSrsC48=./ant_srs_48.bin +antSrsC49=./ant_srs_49.bin +antSrsC50=./ant_srs_50.bin +antSrsC51=./ant_srs_51.bin +antSrsC52=./ant_srs_52.bin +antSrsC53=./ant_srs_53.bin +antSrsC54=./ant_srs_54.bin +antSrsC55=./ant_srs_55.bin +antSrsC56=./ant_srs_56.bin +antSrsC57=./ant_srs_57.bin +antSrsC58=./ant_srs_58.bin +antSrsC59=./ant_srs_59.bin +antSrsC60=./ant_srs_60.bin +antSrsC61=./ant_srs_61.bin +antSrsC62=./ant_srs_62.bin +antSrsC63=./ant_srs_63.bin +antSrsC64=./ant_srs_0.bin +antSrsC65=./ant_srs_1.bin +antSrsC66=./ant_srs_2.bin +antSrsC67=./ant_srs_3.bin +antSrsC68=./ant_srs_4.bin +antSrsC69=./ant_srs_5.bin +antSrsC70=./ant_srs_6.bin +antSrsC71=./ant_srs_7.bin +antSrsC72=./ant_srs_8.bin +antSrsC73=./ant_srs_9.bin +antSrsC74=./ant_srs_10.bin +antSrsC75=./ant_srs_11.bin +antSrsC76=./ant_srs_12.bin +antSrsC77=./ant_srs_13.bin +antSrsC78=./ant_srs_14.bin +antSrsC79=./ant_srs_15.bin +antSrsC80=./ant_srs_16.bin +antSrsC81=./ant_srs_17.bin +antSrsC82=./ant_srs_18.bin +antSrsC83=./ant_srs_19.bin +antSrsC84=./ant_srs_20.bin +antSrsC85=./ant_srs_21.bin +antSrsC86=./ant_srs_22.bin +antSrsC87=./ant_srs_23.bin +antSrsC88=./ant_srs_24.bin +antSrsC89=./ant_srs_25.bin +antSrsC90=./ant_srs_26.bin +antSrsC91=./ant_srs_27.bin +antSrsC92=./ant_srs_28.bin +antSrsC93=./ant_srs_29.bin +antSrsC94=./ant_srs_30.bin +antSrsC95=./ant_srs_31.bin +antSrsC96=./ant_srs_32.bin +antSrsC97=./ant_srs_33.bin +antSrsC98=./ant_srs_34.bin +antSrsC99=./ant_srs_35.bin +antSrsC100=./ant_srs_36.bin +antSrsC101=./ant_srs_37.bin +antSrsC102=./ant_srs_38.bin +antSrsC103=./ant_srs_39.bin +antSrsC104=./ant_srs_40.bin +antSrsC105=./ant_srs_41.bin +antSrsC106=./ant_srs_42.bin +antSrsC107=./ant_srs_43.bin +antSrsC108=./ant_srs_44.bin +antSrsC109=./ant_srs_45.bin +antSrsC110=./ant_srs_46.bin +antSrsC111=./ant_srs_47.bin +antSrsC112=./ant_srs_48.bin +antSrsC113=./ant_srs_49.bin +antSrsC114=./ant_srs_50.bin +antSrsC115=./ant_srs_51.bin +antSrsC116=./ant_srs_52.bin +antSrsC117=./ant_srs_53.bin +antSrsC118=./ant_srs_54.bin +antSrsC119=./ant_srs_55.bin +antSrsC120=./ant_srs_56.bin +antSrsC121=./ant_srs_57.bin +antSrsC122=./ant_srs_58.bin +antSrsC123=./ant_srs_59.bin +antSrsC124=./ant_srs_60.bin +antSrsC125=./ant_srs_61.bin +antSrsC126=./ant_srs_62.bin +antSrsC127=./ant_srs_63.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=0 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_ru_tst451.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_ru_tst451.dat new file mode 100644 index 0000000..da76653 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/conf_o_ru_tst451.dat @@ -0,0 +1,384 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=10 #[0-9] DDDDDDDSUU, for S it's 6:4:4 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig5=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig6=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig7=0,0,0,0,0,0,2,2,2,2,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig8=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig9=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC8=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC9=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC10=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC11=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC12=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC13=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC14=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC15=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC16=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC21=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC22=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC23=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC24=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC25=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC26=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC27=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC28=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC29=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC30=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC31=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_1.cfg +SlotNumTx4=./slot_tx_1.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_2.cfg +SlotNumTx8=./slot_tx_0.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_1.cfg +SlotNumTx14=./slot_tx_1.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_2.cfg +SlotNumTx18=./slot_tx_0.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_0.cfg +SlotNumRx4=./slot_rx_0.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_1.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_0.cfg +SlotNumRx14=./slot_rx_0.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_1.cfg +SlotNumRx19=./slot_rx_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=7 # scheduled SRS slot within TDD period +srsNdmOffset=3 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_srs_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_srs_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_srs_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_srs_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_srs_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_srs_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_srs_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_srs_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_srs_8.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_srs_9.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_srs_10.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_srs_11.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_srs_12.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_srs_13.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_srs_14.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_srs_15.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_srs_16.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_srs_17.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_srs_18.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_srs_19.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_srs_20.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_srs_21.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_srs_22.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_srs_23.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_srs_24.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_srs_25.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_srs_26.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_srs_27.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_srs_28.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_srs_29.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_srs_30.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_srs_31.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_srs_32.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_srs_33.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_srs_34.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_srs_35.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_srs_36.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_srs_37.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_srs_38.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_srs_39.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_srs_40.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_srs_41.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_srs_42.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_srs_43.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_srs_44.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_srs_45.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_srs_46.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_srs_47.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_srs_48.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_srs_49.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_srs_50.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_srs_51.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_srs_52.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_srs_53.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_srs_54.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_srs_55.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_srs_56.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_srs_57.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_srs_58.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_srs_59.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_srs_60.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_srs_61.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_srs_62.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_srs_63.bin +antSrsC64=./usecase/cat_b/mu1_100mhz/ant_srs_0.bin +antSrsC65=./usecase/cat_b/mu1_100mhz/ant_srs_1.bin +antSrsC66=./usecase/cat_b/mu1_100mhz/ant_srs_2.bin +antSrsC67=./usecase/cat_b/mu1_100mhz/ant_srs_3.bin +antSrsC68=./usecase/cat_b/mu1_100mhz/ant_srs_4.bin +antSrsC69=./usecase/cat_b/mu1_100mhz/ant_srs_5.bin +antSrsC70=./usecase/cat_b/mu1_100mhz/ant_srs_6.bin +antSrsC71=./usecase/cat_b/mu1_100mhz/ant_srs_7.bin +antSrsC72=./usecase/cat_b/mu1_100mhz/ant_srs_8.bin +antSrsC73=./usecase/cat_b/mu1_100mhz/ant_srs_9.bin +antSrsC74=./usecase/cat_b/mu1_100mhz/ant_srs_10.bin +antSrsC75=./usecase/cat_b/mu1_100mhz/ant_srs_11.bin +antSrsC76=./usecase/cat_b/mu1_100mhz/ant_srs_12.bin +antSrsC77=./usecase/cat_b/mu1_100mhz/ant_srs_13.bin +antSrsC78=./usecase/cat_b/mu1_100mhz/ant_srs_14.bin +antSrsC79=./usecase/cat_b/mu1_100mhz/ant_srs_15.bin +antSrsC80=./usecase/cat_b/mu1_100mhz/ant_srs_16.bin +antSrsC81=./usecase/cat_b/mu1_100mhz/ant_srs_17.bin +antSrsC82=./usecase/cat_b/mu1_100mhz/ant_srs_18.bin +antSrsC83=./usecase/cat_b/mu1_100mhz/ant_srs_19.bin +antSrsC84=./usecase/cat_b/mu1_100mhz/ant_srs_20.bin +antSrsC85=./usecase/cat_b/mu1_100mhz/ant_srs_21.bin +antSrsC86=./usecase/cat_b/mu1_100mhz/ant_srs_22.bin +antSrsC87=./usecase/cat_b/mu1_100mhz/ant_srs_23.bin +antSrsC88=./usecase/cat_b/mu1_100mhz/ant_srs_24.bin +antSrsC89=./usecase/cat_b/mu1_100mhz/ant_srs_25.bin +antSrsC90=./usecase/cat_b/mu1_100mhz/ant_srs_26.bin +antSrsC91=./usecase/cat_b/mu1_100mhz/ant_srs_27.bin +antSrsC92=./usecase/cat_b/mu1_100mhz/ant_srs_28.bin +antSrsC93=./usecase/cat_b/mu1_100mhz/ant_srs_29.bin +antSrsC94=./usecase/cat_b/mu1_100mhz/ant_srs_30.bin +antSrsC95=./usecase/cat_b/mu1_100mhz/ant_srs_31.bin +antSrsC96=./usecase/cat_b/mu1_100mhz/ant_srs_32.bin +antSrsC97=./usecase/cat_b/mu1_100mhz/ant_srs_33.bin +antSrsC98=./usecase/cat_b/mu1_100mhz/ant_srs_34.bin +antSrsC99=./usecase/cat_b/mu1_100mhz/ant_srs_35.bin +antSrsC100=./usecase/cat_b/mu1_100mhz/ant_srs_36.bin +antSrsC101=./usecase/cat_b/mu1_100mhz/ant_srs_37.bin +antSrsC102=./usecase/cat_b/mu1_100mhz/ant_srs_38.bin +antSrsC103=./usecase/cat_b/mu1_100mhz/ant_srs_39.bin +antSrsC104=./usecase/cat_b/mu1_100mhz/ant_srs_40.bin +antSrsC105=./usecase/cat_b/mu1_100mhz/ant_srs_41.bin +antSrsC106=./usecase/cat_b/mu1_100mhz/ant_srs_42.bin +antSrsC107=./usecase/cat_b/mu1_100mhz/ant_srs_43.bin +antSrsC108=./usecase/cat_b/mu1_100mhz/ant_srs_44.bin +antSrsC109=./usecase/cat_b/mu1_100mhz/ant_srs_45.bin +antSrsC110=./usecase/cat_b/mu1_100mhz/ant_srs_46.bin +antSrsC111=./usecase/cat_b/mu1_100mhz/ant_srs_47.bin +antSrsC112=./usecase/cat_b/mu1_100mhz/ant_srs_48.bin +antSrsC113=./usecase/cat_b/mu1_100mhz/ant_srs_49.bin +antSrsC114=./usecase/cat_b/mu1_100mhz/ant_srs_50.bin +antSrsC115=./usecase/cat_b/mu1_100mhz/ant_srs_51.bin +antSrsC116=./usecase/cat_b/mu1_100mhz/ant_srs_52.bin +antSrsC117=./usecase/cat_b/mu1_100mhz/ant_srs_53.bin +antSrsC118=./usecase/cat_b/mu1_100mhz/ant_srs_54.bin +antSrsC119=./usecase/cat_b/mu1_100mhz/ant_srs_55.bin +antSrsC120=./usecase/cat_b/mu1_100mhz/ant_srs_56.bin +antSrsC121=./usecase/cat_b/mu1_100mhz/ant_srs_57.bin +antSrsC122=./usecase/cat_b/mu1_100mhz/ant_srs_58.bin +antSrsC123=./usecase/cat_b/mu1_100mhz/ant_srs_59.bin +antSrsC124=./usecase/cat_b/mu1_100mhz/ant_srs_60.bin +antSrsC125=./usecase/cat_b/mu1_100mhz/ant_srs_61.bin +antSrsC126=./usecase/cat_b/mu1_100mhz/ant_srs_62.bin +antSrsC127=./usecase/cat_b/mu1_100mhz/ant_srs_63.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=0 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_0.cfg new file mode 100644 index 0000000..445b30b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_0.cfg @@ -0,0 +1,21 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_1.cfg new file mode 100644 index 0000000..b40903b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_1.cfg @@ -0,0 +1,42 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=2 +nPrbElemSrs=0 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f + + +# 0-63 AntC +#group 0 +PrbElemUlAntCMask0=0ffffffff #UE 0 2 layers 4 streams +PrbElemUlAntCMask1=0ffffffff #UE 1 2 layers 4 streams + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# group 0 +PrbElemUl0=0,136,0,14,0,1,1,9,1 #UE 0 2 layers 4 streams +PrbElemUl1=136,137,0,14,1,1,1,9,1 #UE 1 2 layers 4 streams + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,64,0,0,9,1 +ExtBfwUl1=2,64,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_2.cfg new file mode 100644 index 0000000..defd3ac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_2.cfg @@ -0,0 +1,23 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_3.cfg new file mode 100644 index 0000000..7a7767f --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_rx_3.cfg @@ -0,0 +1,29 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 + +nPrbElemSrs=1 + +# 0-15 CCs +PrbElemSrsCCMask0=0f + +# 0-63 AntC +PrbElemSrsAntCMask0=0FFFFFFFFFFFFFFFF #64 Ant + +PrbElemSrs0=0,273,13,1,0,0,1,9,0 \ No newline at end of file diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_0.cfg new file mode 100644 index 0000000..635bdb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_0.cfg @@ -0,0 +1,19 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_1.cfg new file mode 100644 index 0000000..e3372c6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_1.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,14,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,14,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,14,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,14,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,14,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,14,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,14,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,14,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,14,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,14,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,14,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,14,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,14,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,14,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,14,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,14,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=4,2,0,0,9,1 +ExtBfwDl1=4,2,0,0,9,1 +ExtBfwDl2=4,2,0,0,9,1 +ExtBfwDl3=4,2,0,0,9,1 +ExtBfwDl4=28,2,0,0,9,1 +ExtBfwDl5=28,2,0,0,9,1 +ExtBfwDl6=28,2,0,0,9,1 +ExtBfwDl7=28,2,0,0,9,1 +ExtBfwDl8=44,2,0,0,9,1 +ExtBfwDl9=44,2,0,0,9,1 +ExtBfwDl10=64,2,0,0,9,1 +ExtBfwDl11=64,2,0,0,9,1 +ExtBfwDl12=64,2,0,0,9,1 +ExtBfwDl13=64,2,0,0,9,1 +ExtBfwDl14=76,2,0,0,9,1 +ExtBfwDl15=76,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_2.cfg new file mode 100644 index 0000000..0d37214 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/slot_tx_2.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,6,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,6,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,6,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,6,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,6,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,6,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,6,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,6,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,6,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,6,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,6,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,6,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,6,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,6,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,6,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,6,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,2,0,0,9,1 +ExtBfwDl1=2,2,0,0,9,1 +ExtBfwDl2=2,2,0,0,9,1 +ExtBfwDl3=2,2,0,0,9,1 +ExtBfwDl4=14,2,0,0,9,1 +ExtBfwDl5=14,2,0,0,9,1 +ExtBfwDl6=14,2,0,0,9,1 +ExtBfwDl7=14,2,0,0,9,1 +ExtBfwDl8=22,2,0,0,9,1 +ExtBfwDl9=22,2,0,0,9,1 +ExtBfwDl10=32,2,0,0,9,1 +ExtBfwDl11=32,2,0,0,9,1 +ExtBfwDl12=32,2,0,0,9,1 +ExtBfwDl13=32,2,0,0,9,1 +ExtBfwDl14=38,2,0,0,9,1 +ExtBfwDl15=38,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du.cfg new file mode 100644 index 0000000..63ce72c --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0x200000000000 # mask [0- no workers] +#ioWorker=0x3C00000 # mask [0- no workers] +#ioWorker=0x40000000000 +ioWorker=0x3800 +#ioWorker=0x80000001800 # 2pcore as Lcore siblings +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst451.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst451.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst451.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du2.cfg new file mode 100644 index 0000000..810d314 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du2.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 +#ioWorker=0x80000001800 # 2pcore as Lcore siblings +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst451.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst451.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst451.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du_icx2.cfg new file mode 100644 index 0000000..3fdfed9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst451.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst451.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst451.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru.cfg new file mode 100644 index 0000000..784808b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru.cfg @@ -0,0 +1,74 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xCE00 # second socket +ioWorker=0x3FE00 # second socket +#ioWorker=0xE00 # second socket +#ioWorker=0x0200 # second socket +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml +#dpdkMemorySize=28672 +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst451.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst451.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst451.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru2.cfg new file mode 100644 index 0000000..05159af --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xFF800000 # second socket +#ioWorker=0xE00 # second socket +#ioWorker=0x0200 # second socket +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +#dpdkMemorySize=28672 +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst451.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst451.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst451.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru_icx2.cfg new file mode 100644 index 0000000..1d60e2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6451/usecase_ru_icx2.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1FF00000000 # second socket +#dpdkMemorySize=28672 +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst451.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst451.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst451.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..80b46a8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,4,36,5,37, + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..ea0b2ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..5643294 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 1,1,1,1,1,1 + + 500, 500, 500, 500, 500, 500 + + 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..d74e9ab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c080991 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..f2c9edb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_du_tst389.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_du_tst389.dat new file mode 100644 index 0000000..cd6f742 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_du_tst389.dat @@ -0,0 +1,285 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 +antC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_2.cfg +SlotNumTx4=./slot_tx_0.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_1.cfg +SlotNumTx8=./slot_tx_2.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_2.cfg +SlotNumTx14=./slot_tx_0.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_1.cfg +SlotNumTx18=./slot_tx_2.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_3.cfg +SlotNumRx4=./slot_rx_1.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_3.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_3.cfg +SlotNumRx14=./slot_rx_1.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_3.cfg +SlotNumRx19=./slot_rx_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +DlBfwUe16=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe17=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe18=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe19=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe20=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe21=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe22=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe23=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe24=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe25=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe26=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe27=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe28=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe29=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe30=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe31=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +UlBfwUe16=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe17=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe18=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe19=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe20=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe21=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe22=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe23=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe24=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe25=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe26=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe27=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe28=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe29=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe30=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe31=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=0 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_ru_tst389.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_ru_tst389.dat new file mode 100644 index 0000000..7714d03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/conf_o_ru_tst389.dat @@ -0,0 +1,378 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC8=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC9=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC10=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC11=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC12=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC13=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC14=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC15=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC16=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC21=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC22=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC23=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC24=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC25=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC26=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC27=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC28=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC29=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC30=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC31=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_2.cfg +SlotNumTx4=./slot_tx_0.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_1.cfg +SlotNumTx8=./slot_tx_2.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_2.cfg +SlotNumTx14=./slot_tx_0.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_1.cfg +SlotNumTx18=./slot_tx_2.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_3.cfg +SlotNumRx4=./slot_rx_1.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_3.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_3.cfg +SlotNumRx14=./slot_rx_1.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_3.cfg +SlotNumRx19=./slot_rx_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC64=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC65=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC66=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC67=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC68=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC69=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC70=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC71=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC72=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC73=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC74=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC75=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC76=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC77=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC78=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC79=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC80=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC81=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC82=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC83=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC84=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC85=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC86=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC87=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC88=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC89=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC90=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC91=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC92=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC93=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC94=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC95=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC96=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC97=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC98=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC99=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC100=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC101=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC102=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC103=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC104=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC105=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC106=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC107=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC108=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC109=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC110=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC111=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC112=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC113=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC114=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC115=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC116=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC117=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC118=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC119=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC120=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC121=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC122=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC123=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC124=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC125=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC126=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC127=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=0 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_0.cfg new file mode 100644 index 0000000..445b30b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_0.cfg @@ -0,0 +1,21 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_1.cfg new file mode 100644 index 0000000..9127006 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_1.cfg @@ -0,0 +1,83 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=11 +nPrbElemSrs=0 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f +PrbElemUlCCMask6=0f +PrbElemUlCCMask7=0f +PrbElemUlCCMask8=0f +PrbElemUlCCMask9=0f +PrbElemUlCCMask10=0f + +# 0-63 AntC +PrbElemUlAntCMask0=0f #UE 0 2 layers 4 streams +PrbElemUlAntCMask1=0f0 #UE 1 2 layers 4 streams +PrbElemUlAntCMask2=0f00 #UE 2 2 layers 4 streams +PrbElemUlAntCMask3=0f000 #UE 3 2 layers 4 streams +PrbElemUlAntCMask4=0f #UE 4 2 layers 4 streams +PrbElemUlAntCMask5=0f0 #UE 5 2 layers 4 streams +PrbElemUlAntCMask6=03 #UE 6 1 layers 2 streams +PrbElemUlAntCMask7=0C #UE 7 1 layers 2 streams +PrbElemUlAntCMask8=03 #UE 8 1 layers 2 streams +PrbElemUlAntCMask9=0c #UE 9 1 layers 2 streams +PrbElemUlAntCMask10=03 #UE 10 1 layers 2 streams + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemUl0=0,4,0,14,0,1,1,9,1 #UE 0 2 layers 4 streams +PrbElemUl1=0,4,0,14,1,1,1,9,1 #UE 1 2 layers 4 streams +PrbElemUl2=0,4,0,14,2,1,1,9,1 #UE 2 2 layers 4 streams +PrbElemUl3=0,4,0,14,3,1,1,9,1 #UE 3 2 layers 4 streams + +#nc +PrbElemUl4=4,28,0,14,4,1,1,9,1 #UE 4 2 layers 4 streams +PrbElemUl5=4,28,0,14,5,1,1,9,1 #UE 5 2 layers 4 streams +#mc +PrbElemUl6=32,44,0,14,6,1,1,9,1 #UE 6 1 layers 2 streams +PrbElemUl7=32,44,0,14,7,1,1,9,1 #UE 7 1 layers 2 streams + +#mec +PrbElemUl8=76,64,0,14,8,1,1,9,1 #UE 8 1 layers 2 streams +PrbElemUl9=76,64,0,14,9,1,1,9,1 #UE 9 1 layers 2 streams + +#mc +PrbElemUl10=140,76,0,14,10,1,1,9,1 #UE 10 1 layers 2 streams + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,2,0,0,9,1 +ExtBfwUl1=2,2,0,0,9,1 +ExtBfwUl2=2,2,0,0,9,1 +ExtBfwUl3=2,2,0,0,9,1 +ExtBfwUl4=14,2,0,0,9,1 +ExtBfwUl5=14,2,0,0,9,1 +ExtBfwUl6=22,2,0,0,9,1 +ExtBfwUl7=22,2,0,0,9,1 +ExtBfwUl8=32,2,0,0,9,1 +ExtBfwUl9=32,2,0,0,9,1 +ExtBfwUl10=38,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_2.cfg new file mode 100644 index 0000000..defd3ac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_2.cfg @@ -0,0 +1,23 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_3.cfg new file mode 100644 index 0000000..85588b8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_rx_3.cfg @@ -0,0 +1,30 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 + +nPrbElemSrs=1 + +# 0-15 CCs +PrbElemSrsCCMask0=0f + +# 0-63 AntC +PrbElemSrsAntCMask0=0FFFFFFFFFFFFFFFF #64 Ant + +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_0.cfg new file mode 100644 index 0000000..635bdb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_0.cfg @@ -0,0 +1,19 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_1.cfg new file mode 100644 index 0000000..e3372c6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_1.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,14,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,14,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,14,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,14,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,14,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,14,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,14,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,14,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,14,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,14,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,14,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,14,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,14,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,14,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,14,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,14,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=4,2,0,0,9,1 +ExtBfwDl1=4,2,0,0,9,1 +ExtBfwDl2=4,2,0,0,9,1 +ExtBfwDl3=4,2,0,0,9,1 +ExtBfwDl4=28,2,0,0,9,1 +ExtBfwDl5=28,2,0,0,9,1 +ExtBfwDl6=28,2,0,0,9,1 +ExtBfwDl7=28,2,0,0,9,1 +ExtBfwDl8=44,2,0,0,9,1 +ExtBfwDl9=44,2,0,0,9,1 +ExtBfwDl10=64,2,0,0,9,1 +ExtBfwDl11=64,2,0,0,9,1 +ExtBfwDl12=64,2,0,0,9,1 +ExtBfwDl13=64,2,0,0,9,1 +ExtBfwDl14=76,2,0,0,9,1 +ExtBfwDl15=76,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_2.cfg new file mode 100644 index 0000000..d2e1c86 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/slot_tx_2.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,10,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,10,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,10,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,10,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,10,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,10,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,10,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,10,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,10,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,10,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,10,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,10,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,10,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,10,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,10,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,10,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,2,0,0,9,1 +ExtBfwDl1=2,2,0,0,9,1 +ExtBfwDl2=2,2,0,0,9,1 +ExtBfwDl3=2,2,0,0,9,1 +ExtBfwDl4=14,2,0,0,9,1 +ExtBfwDl5=14,2,0,0,9,1 +ExtBfwDl6=14,2,0,0,9,1 +ExtBfwDl7=14,2,0,0,9,1 +ExtBfwDl8=22,2,0,0,9,1 +ExtBfwDl9=22,2,0,0,9,1 +ExtBfwDl10=32,2,0,0,9,1 +ExtBfwDl11=32,2,0,0,9,1 +ExtBfwDl12=32,2,0,0,9,1 +ExtBfwDl13=32,2,0,0,9,1 +ExtBfwDl14=38,2,0,0,9,1 +ExtBfwDl15=38,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du.cfg new file mode 100644 index 0000000..6bbd74e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0x200000000000 # mask [0- no workers] +#ioWorker=0x3C00000 # mask [0- no workers] +#ioWorker=0x40000000000 +ioWorker=0x3800 +#ioWorker=0x80000001800 # 2pcore as Lcore siblings +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du2.cfg new file mode 100644 index 0000000..1d8d3f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du2.cfg @@ -0,0 +1,69 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 +#ioWorker=0x80000001800 # 2pcore as Lcore siblings +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_csx.cfg new file mode 100644 index 0000000..f79a407 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_csx.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +#oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_icx2.cfg new file mode 100644 index 0000000..2f98ee2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x70 +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=30720 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru.cfg new file mode 100644 index 0000000..637d843 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x1FE00 # second socket +#ioWorker=0x0200 # second socket +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml +dpdkMemorySize=28672 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru2.cfg new file mode 100644 index 0000000..a1b3a7e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x7F800000 # second socket + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml +dpdkMemorySize=28672 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru_icx2.cfg new file mode 100644 index 0000000..0928659 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/6911/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0xFF00000000 # second socket + +#oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml +dpdkMemorySize=28672 +iovaMode=0 + +oXuNum=3 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +#dlCpProcBurst=1 # (1) - send CP as burst +#xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_du.dat new file mode 100644 index 0000000..149ec58 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_du.dat @@ -0,0 +1,283 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_ru.dat new file mode 100644 index 0000000..4e6efdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/config_file_o_ru.dat @@ -0,0 +1,330 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du.cfg new file mode 100644 index 0000000..ad650b4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0xE00000C00000 # mask [0- no workers] +ioWorker=0x1C000000001800 +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du2.cfg new file mode 100644 index 0000000..5093299 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du_icx2.cfg new file mode 100644 index 0000000..5093299 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_du_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru.cfg new file mode 100644 index 0000000..367bc0b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru2.cfg new file mode 100644 index 0000000..f9d97ff --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7acb390 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/801/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_du.dat index 6edb472..d97d6c3 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_du.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_ru.dat index e625496..2188ee2 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/config_file_o_ru.dat @@ -21,7 +21,6 @@ #302 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -250,39 +249,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/802/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_du.dat new file mode 100644 index 0000000..85c7099 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_ru.dat new file mode 100644 index 0000000..a8aca6a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#303 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 4 37% 100 1200 37% 100 1200 NC: 12% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/803/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_du.dat new file mode 100644 index 0000000..6301ce9 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_du.dat @@ -0,0 +1,242 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_ru.dat new file mode 100644 index 0000000..549fe45 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/config_file_o_ru.dat @@ -0,0 +1,292 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#304 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 4 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/804/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_du.dat new file mode 100644 index 0000000..ae7d6e6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_ru.dat new file mode 100644 index 0000000..7c9f3fe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/config_file_o_ru.dat @@ -0,0 +1,287 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#305 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 2 37% 100 1200 37% 100 1200 MEC: 28% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/805/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_du.dat new file mode 100644 index 0000000..b452efe --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_du.dat @@ -0,0 +1,244 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_ru.dat new file mode 100644 index 0000000..07b5808 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#306 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 1 37% 100 1200 37% 100 1200 EC: 36% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=1 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/806/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_du.dat new file mode 100644 index 0000000..09d76e1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_du.dat @@ -0,0 +1,283 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_ru.dat new file mode 100644 index 0000000..ddcd7b6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/config_file_o_ru.dat @@ -0,0 +1,330 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#311 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 16 100% 273 3276 100% 273 3276 Peak: 100 % + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + + + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin + + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=16 +max_sections_per_symbol=16 + +nPrbElemDl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,18,0,14,5,1,1,9,1 +PrbElemDl6=108,18,0,14,6,1,1,9,1 +PrbElemDl7=126,18,0,14,7,1,1,9,1 +PrbElemDl8=144,18,0,14,8,1,1,9,1 +PrbElemDl9=162,18,0,14,9,1,1,9,1 +PrbElemDl10=180,18,0,14,10,1,1,9,1 +PrbElemDl11=198,18,0,14,11,1,1,9,1 +PrbElemDl12=216,18,0,14,12,1,1,9,1 +PrbElemDl13=234,18,0,14,13,1,1,9,1 +PrbElemDl14=252,18,0,14,14,1,1,9,1 +PrbElemDl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,9,0,0,9,1 +ExtBfwDl6=2,9,0,0,9,1 +ExtBfwDl7=2,9,0,0,9,1 +ExtBfwDl8=2,9,0,0,9,1 +ExtBfwDl9=2,9,0,0,9,1 +ExtBfwDl10=2,9,0,0,9,1 +ExtBfwDl11=2,9,0,0,9,1 +ExtBfwDl12=2,9,0,0,9,1 +ExtBfwDl13=2,9,0,0,9,1 +ExtBfwDl14=2,9,0,0,9,1 +ExtBfwDl15=2,2,0,0,9,1 + + +nPrbElemUl=16 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,18,0,14,5,1,1,9,1 +PrbElemUl6=108,18,0,14,6,1,1,9,1 +PrbElemUl7=126,18,0,14,7,1,1,9,1 +PrbElemUl8=144,18,0,14,8,1,1,9,1 +PrbElemUl9=162,18,0,14,9,1,1,9,1 +PrbElemUl10=180,18,0,14,10,1,1,9,1 +PrbElemUl11=198,18,0,14,11,1,1,9,1 +PrbElemUl12=216,18,0,14,12,1,1,9,1 +PrbElemUl13=234,18,0,14,13,1,1,9,1 +PrbElemUl14=252,18,0,14,14,1,1,9,1 +PrbElemUl15=270,3,0,14,15,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,9,0,0,9,1 +ExtBfwUl6=2,9,0,0,9,1 +ExtBfwUl7=2,9,0,0,9,1 +ExtBfwUl8=2,9,0,0,9,1 +ExtBfwUl9=2,9,0,0,9,1 +ExtBfwUl10=2,9,0,0,9,1 +ExtBfwUl11=2,9,0,0,9,1 +ExtBfwUl12=2,9,0,0,9,1 +ExtBfwUl13=2,9,0,0,9,1 +ExtBfwUl14=2,9,0,0,9,1 +ExtBfwUl15=2,2,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du.cfg new file mode 100644 index 0000000..1745efb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du.cfg @@ -0,0 +1,59 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0xE00000C00000 # mask [0- no workers] +ioWorker=0x1C000000001800 +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du2.cfg new file mode 100644 index 0000000..a134fab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 + +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du_icx2.cfg new file mode 100644 index 0000000..a134fab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x1F0 + +dpdkMemorySize=16384 +#8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/811/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_du.dat index cf55ede..aa03958 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_du.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -205,39 +204,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_ru.dat index f647eae..433a7a8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/config_file_o_ru.dat @@ -21,7 +21,6 @@ #312 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 16 37% 100 1200 37% 100 1200 Peak: 4 % # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) @@ -249,39 +248,39 @@ totalBFWeights=64 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du.cfg index f6efede..1b4b1a0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du.cfg @@ -19,7 +19,7 @@ appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=10 # core id ioWorker=0x4000000000000 # mask [0- no workers] diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru.cfg index 7d7d28a..ba1ebdb 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru.cfg @@ -18,7 +18,7 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -mainCore=0 #core for main() +mainCore=1 #core for main() systemCore=2 ioCore=4 # core id ioWorker=0x3E0 # second socket diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/812/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_du.dat new file mode 100644 index 0000000..3e3705e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_ru.dat new file mode 100644 index 0000000..7300b03 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#NC +#12% +#313 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 37% 100 1200 37% 100 1200 NC: 12% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/813/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_du.dat new file mode 100644 index 0000000..9ed4f0e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_du.dat @@ -0,0 +1,242 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_ru.dat new file mode 100644 index 0000000..e097cf0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MC +#20% +#314 TDD DDDFU: S it's 10:2:2 1 64T64R 100 8 8 37% 100 1200 37% 100 1200 MC: 20% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=8 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/814/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_du.dat new file mode 100644 index 0000000..d07f4c3 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_du.dat @@ -0,0 +1,243 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_ru.dat new file mode 100644 index 0000000..f1a22ca --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#MEC +#28% +#315 TDD DDDFU: S it's 10:2:2 1 64T64R 100 4 4 37% 100 1200 37% 100 1200 MEC: 28% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/815/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_du.dat new file mode 100644 index 0000000..04e63f4 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_du.dat @@ -0,0 +1,244 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% + + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_ru.dat new file mode 100644 index 0000000..76b7411 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/config_file_o_ru.dat @@ -0,0 +1,286 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#EC +#36% +#316 TDD DDDFU: S it's 10:2:2 1 64T64R 100 2 2 37% 100 1200 37% 100 1200 EC: 36% + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=2 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=1500 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +max_sections_per_slot=12 +max_sections_per_symbol=12 + +nPrbElemDl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,18,0,14,0,1,1,9,1 +PrbElemDl1=18,18,0,14,1,1,1,9,1 +PrbElemDl2=36,18,0,14,2,1,1,9,1 +PrbElemDl3=54,18,0,14,3,1,1,9,1 +PrbElemDl4=72,18,0,14,4,1,1,9,1 +PrbElemDl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,9,0,0,9,1 +ExtBfwDl1=2,9,0,0,9,1 +ExtBfwDl2=2,9,0,0,9,1 +ExtBfwDl3=2,9,0,0,9,1 +ExtBfwDl4=2,9,0,0,9,1 +ExtBfwDl5=2,5,0,0,9,1 + + +nPrbElemUl=6 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,18,0,14,0,1,1,9,1 +PrbElemUl1=18,18,0,14,1,1,1,9,1 +PrbElemUl2=36,18,0,14,2,1,1,9,1 +PrbElemUl3=54,18,0,14,3,1,1,9,1 +PrbElemUl4=72,18,0,14,4,1,1,9,1 +PrbElemUl5=90,10,0,14,5,1,1,9,1 + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,9,0,0,9,1 +ExtBfwUl1=2,9,0,0,9,1 +ExtBfwUl2=2,9,0,0,9,1 +ExtBfwUl3=2,9,0,0,9,1 +ExtBfwUl4=2,9,0,0,9,1 +ExtBfwUl5=2,5,0,0,9,1 + + +nPrbElemSrs=11 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +PrbElemSrs0=0,30,0,1,0,0,1,9,0 +PrbElemSrs1=30,30,0,1,0,0,1,9,0 +PrbElemSrs2=60,30,0,1,0,0,1,9,0 +PrbElemSrs3=90,30,0,1,0,0,1,9,0 +PrbElemSrs4=120,30,0,1,0,0,1,9,0 +PrbElemSrs5=150,30,0,1,0,0,1,9,0 +PrbElemSrs6=180,30,0,1,0,0,1,9,0 +PrbElemSrs7=210,30,0,1,0,0,1,9,0 +PrbElemSrs8=240,30,0,1,0,0,1,9,0 +PrbElemSrs9=270,30,0,1,0,0,1,9,0 +PrbElemSrs10=270,3,0,1,0,0,1,9,0 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled +compType=1 # (1) Static Compression with config info sent over the M-Plane (0) Dynamic compression with configuration sent over the C and U Plane +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du.cfg new file mode 100644 index 0000000..1b4b1a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +ioWorker=0x4000000000000 # mask [0- no workers] +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du_icx2.cfg new file mode 100644 index 0000000..9ec28f2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_du_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +dpdkMemorySize=8192 + +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru.cfg new file mode 100644 index 0000000..ba1ebdb --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=4 # core id +ioWorker=0x3E0 # second socket +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru2.cfg new file mode 100644 index 0000000..0eddab0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0xF800000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ed76410 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/816/usecase_ru_icx2.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +#dpdkMemorySize=17408 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..72d50b1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,4,36,5,37, + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..16e9416 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..e8b3b15 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 8 + + 1 + + + + + 1 + + 1 + + 30 + + 24 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 2 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..d74e9ab --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c080991 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..01dc3b1 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 10 + + 40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_du_tst389.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_du_tst389.dat new file mode 100644 index 0000000..2a82a95 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_du_tst389.dat @@ -0,0 +1,285 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 +antC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_2.cfg +SlotNumTx4=./slot_tx_0.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_1.cfg +SlotNumTx8=./slot_tx_2.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_2.cfg +SlotNumTx14=./slot_tx_0.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_1.cfg +SlotNumTx18=./slot_tx_2.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_3.cfg +SlotNumRx4=./slot_rx_1.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_3.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_3.cfg +SlotNumRx14=./slot_rx_1.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_3.cfg +SlotNumRx19=./slot_rx_1.cfg + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe4=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe5=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe6=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe7=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe8=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe9=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe10=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe11=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe12=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe13=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe14=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe15=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +DlBfwUe16=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe17=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe18=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe19=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe20=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe21=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe22=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe23=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe24=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe25=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe26=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe27=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe28=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe29=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe30=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe31=./usecase/cat_b/mu1_100mhz/dl_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe4=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe5=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe6=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe7=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe8=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe9=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe10=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe11=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe12=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe13=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe14=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe15=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +UlBfwUe16=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe17=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe18=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe19=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe20=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe21=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe22=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe23=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe24=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe25=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe26=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe27=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe28=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_4.bin #UE4 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe29=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_5.bin #UE5 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe30=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_6.bin #UE6 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe31=./usecase/cat_b/mu1_100mhz/ul_bfw_ue_7.bin #UE7 weights for TRX antennas [antElmTRx x numRBs x slot points] + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_ru_tst389.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_ru_tst389.dat new file mode 100644 index 0000000..c5ebdd7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/conf_o_ru_tst389.dat @@ -0,0 +1,383 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#6x100Mhz: 80 % +#901 TDD DDDFU: S it's 10:2:2 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=2 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=16 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=16 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=64 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=100 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC1=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC2=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC3=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC4=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC5=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC6=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC7=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC8=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC9=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC10=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC11=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC12=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC13=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC14=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC15=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC16=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC17=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC18=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC19=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC20=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC21=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC22=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC23=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 +antC24=./usecase/cat_b/mu1_100mhz/uliq00_tst378.bin #CC0 +antC25=./usecase/cat_b/mu1_100mhz/uliq01_tst378.bin #CC0 +antC26=./usecase/cat_b/mu1_100mhz/uliq02_tst378.bin #CC0 +antC27=./usecase/cat_b/mu1_100mhz/uliq03_tst378.bin #CC0 +antC28=./usecase/cat_b/mu1_100mhz/uliq04_tst378.bin #CC0 +antC29=./usecase/cat_b/mu1_100mhz/uliq05_tst378.bin #CC0 +antC30=./usecase/cat_b/mu1_100mhz/uliq06_tst378.bin #CC0 +antC31=./usecase/cat_b/mu1_100mhz/uliq07_tst378.bin #CC0 + +SlotNumTx0=./slot_tx_1.cfg +SlotNumTx1=./slot_tx_1.cfg +SlotNumTx2=./slot_tx_1.cfg +SlotNumTx3=./slot_tx_2.cfg +SlotNumTx4=./slot_tx_0.cfg + +SlotNumTx5=./slot_tx_1.cfg +SlotNumTx6=./slot_tx_1.cfg +SlotNumTx7=./slot_tx_1.cfg +SlotNumTx8=./slot_tx_2.cfg +SlotNumTx9=./slot_tx_0.cfg + +SlotNumTx10=./slot_tx_1.cfg +SlotNumTx11=./slot_tx_1.cfg +SlotNumTx12=./slot_tx_1.cfg +SlotNumTx13=./slot_tx_2.cfg +SlotNumTx14=./slot_tx_0.cfg + +SlotNumTx15=./slot_tx_1.cfg +SlotNumTx16=./slot_tx_1.cfg +SlotNumTx17=./slot_tx_1.cfg +SlotNumTx18=./slot_tx_2.cfg +SlotNumTx19=./slot_tx_0.cfg + +SlotNumRx0=./slot_rx_0.cfg +SlotNumRx1=./slot_rx_0.cfg +SlotNumRx2=./slot_rx_0.cfg +SlotNumRx3=./slot_rx_3.cfg +SlotNumRx4=./slot_rx_1.cfg + +SlotNumRx5=./slot_rx_0.cfg +SlotNumRx6=./slot_rx_0.cfg +SlotNumRx7=./slot_rx_0.cfg +SlotNumRx8=./slot_rx_3.cfg +SlotNumRx9=./slot_rx_1.cfg + +SlotNumRx10=./slot_rx_0.cfg +SlotNumRx11=./slot_rx_0.cfg +SlotNumRx12=./slot_rx_0.cfg +SlotNumRx13=./slot_rx_3.cfg +SlotNumRx14=./slot_rx_1.cfg + +SlotNumRx15=./slot_rx_0.cfg +SlotNumRx16=./slot_rx_0.cfg +SlotNumRx17=./slot_rx_0.cfg +SlotNumRx18=./slot_rx_3.cfg +SlotNumRx19=./slot_rx_1.cfg + +antPrachC0=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC1=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC2=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC3=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC4=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC5=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC6=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC7=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC8=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC9=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC10=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC11=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC12=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC13=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC14=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC15=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +antPrachC16=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC0 +antPrachC17=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC0 +antPrachC18=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC0 +antPrachC19=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC0 +antPrachC20=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC1 +antPrachC21=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC1 +antPrachC22=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC1 +antPrachC23=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC1 +antPrachC24=./usecase/cat_b/mu1_100mhz/ant_0.bin #CC2 +antPrachC25=./usecase/cat_b/mu1_100mhz/ant_1.bin #CC2 +antPrachC26=./usecase/cat_b/mu1_100mhz/ant_2.bin #CC2 +antPrachC27=./usecase/cat_b/mu1_100mhz/ant_3.bin #CC2 +antPrachC28=./usecase/cat_b/mu1_100mhz/ant_4.bin #CC3 +antPrachC29=./usecase/cat_b/mu1_100mhz/ant_5.bin #CC3 +antPrachC30=./usecase/cat_b/mu1_100mhz/ant_6.bin #CC3 +antPrachC31=./usecase/cat_b/mu1_100mhz/ant_7.bin #CC3 + +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=1 # Enable (1)| disable (0) SRS +srsSym=4 # deprecated +srsSlot=3 # scheduled SRS slot within TDD period +srsNdmOffset=2 # delay offset to start NDM SRS U-Plane +srsNdmTxDuration=8 # TX duration for NDM SRTS U-Plane (numberof of symbols) + +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC32=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC33=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC34=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC35=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC36=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC37=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC38=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC39=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC40=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC41=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC42=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC43=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC44=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC45=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC46=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC47=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC48=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC49=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC50=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC51=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC52=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC53=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC54=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC55=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC56=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC57=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC58=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC59=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC60=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC61=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC62=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC63=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC64=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC65=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC66=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC67=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC68=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC69=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC70=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC71=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC72=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC73=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC74=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC75=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC76=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC77=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC78=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC79=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC80=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC81=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC82=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC83=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC84=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC85=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC86=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC87=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC88=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC89=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC90=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC91=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC92=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC93=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC94=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC95=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC96=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC97=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC98=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC99=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC100=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC101=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC102=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC103=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC104=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC105=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC106=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC107=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC108=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC109=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC110=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC111=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC112=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC113=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC114=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC115=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC116=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC117=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC118=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC119=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC120=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC121=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC122=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC123=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC124=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC125=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC126=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC127=./usecase/cat_b/mu1_100mhz/ant_7.bin + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +RunSlotPrbMapBySymbolEna=0 # 1 - enable one C-Plane packet for each slot with prb mapping by symbol 0 - disabled +max_sections_per_slot=16 +max_sections_per_symbol=16 + +#nPrbElemDl=6 +#nPrbElemUl=6 + +nPrbElemSrs=1 +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=64 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=285 # 285.42us +T2a_max_cp_dl=429 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=285 # 285.42us +T2a_max_cp_ul=429 # 428.12us + +#Reception Window U-plane +T2a_min_up=71 # 71.35in us +T2a_max_up=428 # 428.12us + +#Transmission Window +Ta3_min=20 # in us +Ta3_max=32 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=285 +T1a_max_cp_dl=429 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=300 + +#U-plane +##Transmission Window +T1a_min_up=96 #71 + 25 us +T1a_max_up=196 #71 + 25 us + +#Reception Window +Ta4_min=0 # in us +Ta4_max=75 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_0.cfg new file mode 100644 index 0000000..445b30b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_0.cfg @@ -0,0 +1,21 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_1.cfg new file mode 100644 index 0000000..9127006 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_1.cfg @@ -0,0 +1,83 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=11 +nPrbElemSrs=0 + +# 0-15 CCs +PrbElemUlCCMask0=0f +PrbElemUlCCMask1=0f +PrbElemUlCCMask2=0f +PrbElemUlCCMask3=0f +PrbElemUlCCMask4=0f +PrbElemUlCCMask5=0f +PrbElemUlCCMask6=0f +PrbElemUlCCMask7=0f +PrbElemUlCCMask8=0f +PrbElemUlCCMask9=0f +PrbElemUlCCMask10=0f + +# 0-63 AntC +PrbElemUlAntCMask0=0f #UE 0 2 layers 4 streams +PrbElemUlAntCMask1=0f0 #UE 1 2 layers 4 streams +PrbElemUlAntCMask2=0f00 #UE 2 2 layers 4 streams +PrbElemUlAntCMask3=0f000 #UE 3 2 layers 4 streams +PrbElemUlAntCMask4=0f #UE 4 2 layers 4 streams +PrbElemUlAntCMask5=0f0 #UE 5 2 layers 4 streams +PrbElemUlAntCMask6=03 #UE 6 1 layers 2 streams +PrbElemUlAntCMask7=0C #UE 7 1 layers 2 streams +PrbElemUlAntCMask8=03 #UE 8 1 layers 2 streams +PrbElemUlAntCMask9=0c #UE 9 1 layers 2 streams +PrbElemUlAntCMask10=03 #UE 10 1 layers 2 streams + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemUl0=0,4,0,14,0,1,1,9,1 #UE 0 2 layers 4 streams +PrbElemUl1=0,4,0,14,1,1,1,9,1 #UE 1 2 layers 4 streams +PrbElemUl2=0,4,0,14,2,1,1,9,1 #UE 2 2 layers 4 streams +PrbElemUl3=0,4,0,14,3,1,1,9,1 #UE 3 2 layers 4 streams + +#nc +PrbElemUl4=4,28,0,14,4,1,1,9,1 #UE 4 2 layers 4 streams +PrbElemUl5=4,28,0,14,5,1,1,9,1 #UE 5 2 layers 4 streams +#mc +PrbElemUl6=32,44,0,14,6,1,1,9,1 #UE 6 1 layers 2 streams +PrbElemUl7=32,44,0,14,7,1,1,9,1 #UE 7 1 layers 2 streams + +#mec +PrbElemUl8=76,64,0,14,8,1,1,9,1 #UE 8 1 layers 2 streams +PrbElemUl9=76,64,0,14,9,1,1,9,1 #UE 9 1 layers 2 streams + +#mc +PrbElemUl10=140,76,0,14,10,1,1,9,1 #UE 10 1 layers 2 streams + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,2,0,0,9,1 +ExtBfwUl1=2,2,0,0,9,1 +ExtBfwUl2=2,2,0,0,9,1 +ExtBfwUl3=2,2,0,0,9,1 +ExtBfwUl4=14,2,0,0,9,1 +ExtBfwUl5=14,2,0,0,9,1 +ExtBfwUl6=22,2,0,0,9,1 +ExtBfwUl7=22,2,0,0,9,1 +ExtBfwUl8=32,2,0,0,9,1 +ExtBfwUl9=32,2,0,0,9,1 +ExtBfwUl10=38,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_2.cfg new file mode 100644 index 0000000..defd3ac --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_2.cfg @@ -0,0 +1,23 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 +nPrbElemSrs=0 + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_3.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_3.cfg new file mode 100644 index 0000000..85588b8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_rx_3.cfg @@ -0,0 +1,30 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemUl=0 + +nPrbElemSrs=1 + +# 0-15 CCs +PrbElemSrsCCMask0=0f + +# 0-63 AntC +PrbElemSrsAntCMask0=0FFFFFFFFFFFFFFFF #64 Ant + +PrbElemSrs0=0,273,13,1,0,0,1,9,0 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_0.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_0.cfg new file mode 100644 index 0000000..635bdb2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_0.cfg @@ -0,0 +1,19 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=0 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_1.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_1.cfg new file mode 100644 index 0000000..e3372c6 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_1.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,14,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,14,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,14,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,14,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,14,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,14,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,14,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,14,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,14,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,14,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,14,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,14,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,14,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,14,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,14,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,14,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=4,2,0,0,9,1 +ExtBfwDl1=4,2,0,0,9,1 +ExtBfwDl2=4,2,0,0,9,1 +ExtBfwDl3=4,2,0,0,9,1 +ExtBfwDl4=28,2,0,0,9,1 +ExtBfwDl5=28,2,0,0,9,1 +ExtBfwDl6=28,2,0,0,9,1 +ExtBfwDl7=28,2,0,0,9,1 +ExtBfwDl8=44,2,0,0,9,1 +ExtBfwDl9=44,2,0,0,9,1 +ExtBfwDl10=64,2,0,0,9,1 +ExtBfwDl11=64,2,0,0,9,1 +ExtBfwDl12=64,2,0,0,9,1 +ExtBfwDl13=64,2,0,0,9,1 +ExtBfwDl14=76,2,0,0,9,1 +ExtBfwDl15=76,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_2.cfg new file mode 100644 index 0000000..d2e1c86 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/slot_tx_2.cfg @@ -0,0 +1,103 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +nPrbElemDl=16 + +# 0-15 CCs +PrbElemDlCCMask0=0f +PrbElemDlCCMask1=0f +PrbElemDlCCMask2=0f +PrbElemDlCCMask3=0f +PrbElemDlCCMask4=0f +PrbElemDlCCMask5=0f +PrbElemDlCCMask6=0f +PrbElemDlCCMask7=0f +PrbElemDlCCMask8=0f +PrbElemDlCCMask9=0f +PrbElemDlCCMask10=0f +PrbElemDlCCMask11=0f +PrbElemDlCCMask12=0f +PrbElemDlCCMask13=0f +PrbElemDlCCMask14=0f +PrbElemDlCCMask15=0f + +# 0-63 AntC +PrbElemDlAntCMask0=0f #UE 0 4 layers 0 1 2 3 +PrbElemDlAntCMask1=0f0 #UE 1 4 layers 4 5 6 7 +PrbElemDlAntCMask2=0f00 #UE 2 4 layers 8 9 10 11 +PrbElemDlAntCMask3=0f000 #UE 3 4 layers 12 13 14 15 +PrbElemDlAntCMask4=03 #UE 4 2 layers 0 1 +PrbElemDlAntCMask5=0c #UE 5 2 layers 2 3 +PrbElemDlAntCMask6=030 #UE 6 2 layers 4 5 +PrbElemDlAntCMask7=0C0 #UE 7 2 layers 6 7 +PrbElemDlAntCMask8=03 #UE 8 2 layers 0 1 +PrbElemDlAntCMask9=0c #UE 9 2 layers 2 2 +PrbElemDlAntCMask10=01 #UE 10 1 layers 0 +PrbElemDlAntCMask11=02 #UE 11 1 layers 1 +PrbElemDlAntCMask12=04 #UE 12 1 layers 2 +PrbElemDlAntCMask13=08 #UE 13 1 layers 3 +PrbElemDlAntCMask14=01 #UE 14 1 layers 0 +PrbElemDlAntCMask15=02 #UE 15 1 layers 1 + +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# peak +PrbElemDl0=0,4,0,10,0,1,1,9,1 #UE 0 4 layers +PrbElemDl1=0,4,0,10,1,1,1,9,1 #UE 1 4 layers +PrbElemDl2=0,4,0,10,2,1,1,9,1 #UE 2 4 layers +PrbElemDl3=0,4,0,10,3,1,1,9,1 #UE 3 4 layers + +#nc +PrbElemDl4=4,28,0,10,4,1,1,9,1 #UE 4 2 layers +PrbElemDl5=4,28,0,10,5,1,1,9,1 #UE 5 2 layers +PrbElemDl6=4,28,0,10,6,1,1,9,1 #UE 6 2 layers +PrbElemDl7=4,28,0,10,7,1,1,9,1 #UE 7 2 layers + +#mc +PrbElemDl8=32,44,0,10,8,1,1,9,1 #UE 8 2 layers +PrbElemDl9=32,44,0,10,9,1,1,9,1 #UE 9 2 layers + +#mec +PrbElemDl10=76,64,0,10,10,1,1,9,1 #UE 10 1 layers +PrbElemDl11=76,64,0,10,11,1,1,9,1 #UE 11 1 layers +PrbElemDl12=76,64,0,10,12,1,1,9,1 #UE 12 1 layers +PrbElemDl13=76,64,0,10,13,1,1,9,1 #UE 13 1 layers + +#mc +PrbElemDl14=140,76,0,10,14,1,1,9,1 #UE 14 1 layers +PrbElemDl15=140,76,0,10,15,1,1,9,1 #UE 15 1 layers + +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,2,0,0,9,1 +ExtBfwDl1=2,2,0,0,9,1 +ExtBfwDl2=2,2,0,0,9,1 +ExtBfwDl3=2,2,0,0,9,1 +ExtBfwDl4=14,2,0,0,9,1 +ExtBfwDl5=14,2,0,0,9,1 +ExtBfwDl6=14,2,0,0,9,1 +ExtBfwDl7=14,2,0,0,9,1 +ExtBfwDl8=22,2,0,0,9,1 +ExtBfwDl9=22,2,0,0,9,1 +ExtBfwDl10=32,2,0,0,9,1 +ExtBfwDl11=32,2,0,0,9,1 +ExtBfwDl12=32,2,0,0,9,1 +ExtBfwDl13=32,2,0,0,9,1 +ExtBfwDl14=38,2,0,0,9,1 +ExtBfwDl15=38,2,0,0,9,1 + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du.cfg new file mode 100644 index 0000000..09700a0 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=10 # core id +#ioWorker=0x200000000000 # mask [0- no workers] +#ioWorker=0x3C00000 # mask [0- no workers] +#ioWorker=0x40000000000 +ioWorker=0x800 +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du2.cfg new file mode 100644 index 0000000..569d7aa --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du2.cfg @@ -0,0 +1,68 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#dpdkMemorySize=8192 +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +#ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_csx.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_csx.cfg new file mode 100644 index 0000000..21fb993 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_csx.cfg @@ -0,0 +1,64 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x1E0000000 # mask [0- no workers] +#ioWorker=0x700000600 + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +#oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_icx2.cfg new file mode 100644 index 0000000..7017978 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_du_icx2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_du_tst389.dat #O-DU0 +oXuCfgFile1=./conf_o_du_tst389.dat #O-DU1 +oXuCfgFile2=./conf_o_du_tst389.dat #O-DU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru.cfg new file mode 100644 index 0000000..ef75eff --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x1FE00 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru2.cfg new file mode 100644 index 0000000..399e672 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x7F800000 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru_icx2.cfg new file mode 100644 index 0000000..bc12f2b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/911/usecase_ru_icx2.cfg @@ -0,0 +1,70 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0xFF00000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +dpdkMemorySize=18432 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs +oXuRxqNumber=21 # number of HW RX Queues per VF (should >= RX IQ stream per VF) +dlCpProcBurst=1 # (1) - send CP as burst +xranMlogDisable=1 # (1) to reduce Mlog (disable) (0) - keep all mlog (enable default) + +oXuCfgFile0=./conf_o_ru_tst389.dat #O-RU0 +oXuCfgFile1=./conf_o_ru_tst389.dat #O-RU1 +oXuCfgFile2=./conf_o_ru_tst389.dat #O-RU2 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + +# remote O-XU 3 Eth Link 0 +oXuRem3Mac0=00:11:22:33:03:00 +oXuRem3Mac1=00:11:22:33:03:10 +# remote O-XU 3 Eth Link 1 +oXuRem3Mac2=00:11:22:33:03:20 +oXuRem3Mac3=00:11:22:33:03:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du.xml index 81b0e03..d9197d8 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 16 - 6 + 7 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..b23cbdd --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 7 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..5bf14c2 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 7 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru.xml index 8068127..009caf0 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru.xml @@ -41,11 +41,11 @@ 1 - 6 + 16 - 4 + 7 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c2b206b --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 7 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..b355b68 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 16 + + 7 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_du.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_du.dat index 61572f7..e8efea6 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_du.dat @@ -18,16 +18,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -57,12 +56,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -124,13 +122,13 @@ srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used max_sections_per_slot=8 max_sections_per_symbol=8 nPrbElemDl=8 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,36,0,14,1,1,0,16,1 PrbElemDl1=36,36,0,14,2,1,0,16,1 PrbElemDl2=72,36,0,14,3,1,0,16,1 @@ -152,7 +150,7 @@ ExtBfwDl7=7,3,0,0,9,1 nPrbElemUl=8 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,36,0,14,1,1,0,16,1 PrbElemUl1=36,36,0,14,2,1,0,16,1 PrbElemUl2=72,36,0,14,3,1,0,16,1 @@ -191,39 +189,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_ru.dat index cfb7c1f..0d93c39 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/config_file_o_ru.dat @@ -18,16 +18,15 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side @@ -57,12 +56,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=15 # Eth 0 duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app @@ -120,49 +118,49 @@ srsNdmOffset=3 # delay offset to start NDM SRS U-Plane srsNdmTxDuration=4 # TX duration for NDM SRTS U-Plane (numberof of symbols) -antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin -antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin -antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin -antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin -antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin -antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin -antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin -antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin -antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC0=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC1=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC2=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC3=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC4=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC5=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC6=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC7=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC8=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC9=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC10=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC11=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC12=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC13=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC14=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC15=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC16=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC17=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC18=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC19=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC20=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC21=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC22=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC23=./usecase/cat_b/mu1_100mhz/ant_7.bin +antSrsC24=./usecase/cat_b/mu1_100mhz/ant_0.bin +antSrsC25=./usecase/cat_b/mu1_100mhz/ant_1.bin +antSrsC26=./usecase/cat_b/mu1_100mhz/ant_2.bin +antSrsC27=./usecase/cat_b/mu1_100mhz/ant_3.bin +antSrsC28=./usecase/cat_b/mu1_100mhz/ant_4.bin +antSrsC29=./usecase/cat_b/mu1_100mhz/ant_5.bin +antSrsC30=./usecase/cat_b/mu1_100mhz/ant_6.bin +antSrsC31=./usecase/cat_b/mu1_100mhz/ant_7.bin ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used max_sections_per_slot=8 max_sections_per_symbol=8 nPrbElemDl=8 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,36,0,14,1,1,0,16,1 PrbElemDl1=36,36,0,14,2,1,0,16,1 PrbElemDl2=72,36,0,14,3,1,0,16,1 @@ -173,7 +171,7 @@ PrbElemDl6=216,36,0,14,7,1,0,16,1 PrbElemDl7=252,21,0,14,8,1,0,16,1 nPrbElemUl=8 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,36,0,14,1,1,0,16,1 PrbElemUl1=36,36,0,14,2,1,0,16,1 PrbElemUl2=72,36,0,14,3,1,0,16,1 @@ -202,39 +200,39 @@ totalBFWeights=32 # Total number of Beamforming Weights on RU Tadv_cp_dl=25 # in us # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages #Reception Window C-plane DL -T2a_min_cp_dl=285 # 285.42us -T2a_max_cp_dl=429 # 428.12us +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us #Reception Window C-plane UL -T2a_min_cp_ul=285 # 285.42us -T2a_max_cp_ul=429 # 428.12us +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us #Reception Window U-plane -T2a_min_up=71 # 71.35in us -T2a_max_up=428 # 428.12us +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us #Transmission Window -Ta3_min=20 # in us -Ta3_max=32 # in us +Ta3_min=50 # in us +Ta3_max=171 # in us ########################################################### ##O-DU Settings #C-plane #Transmission Window Fast C-plane DL -T1a_min_cp_dl=285 -T1a_max_cp_dl=429 +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 ##Transmission Window Fast C-plane UL T1a_min_cp_ul=285 -T1a_max_cp_ul=300 +T1a_max_cp_ul=535 #U-plane ##Transmission Window -T1a_min_up=96 #71 + 25 us -T1a_max_up=196 #71 + 25 us +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us #Reception Window -Ta4_min=0 # in us -Ta4_max=75 # in us +Ta4_max=331 # in us +Ta4_max=331 # in us ########################################################### diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du.cfg index 1c0bb78..93f7d4b 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuNum=1 # numbers of O-RU connected to O-DU @@ -30,24 +30,6 @@ oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuCfgFile0=./config_file_o_du.dat #O-RU0 -#O-XU 0 -#PciBusAddoXu0Vf0=0000:51:01.0 -#PciBusAddoXu0Vf1=0000:51:01.1 -#PciBusAddoXu0Vf2=0000:51:01.2 -#PciBusAddoXu0Vf3=0000:51:01.3 - -#O-XU 1 -#PciBusAddoXu1Vf0=0000:51:01.4 -#PciBusAddoXu1Vf1=0000:51:01.5 -#PciBusAddoXu1Vf2=0000:51:01.6 -#PciBusAddoXu1Vf3=0000:51:01.7 - -#O-XU 2 -#PciBusAddoXu2Vf0=0000:51:02.0 -#PciBusAddoXu2Vf1=0000:51:02.1 -#PciBusAddoXu2Vf2=0000:51:02.2 -#PciBusAddoXu2Vf3=0000:51:02.3 - # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:01 oXuRem0Mac1=00:11:22:33:00:11 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du2.cfg new file mode 100644 index 0000000..66c1c7d --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..615ea49 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru.cfg index 1ab0180..d1fb355 100644 --- a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU @@ -28,24 +29,6 @@ oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet oXuCfgFile0=./config_file_o_ru.dat #O-RU0 -#O-XU 0 -#PciBusAddoXu0Vf0=0000:51:11.0 -#PciBusAddoXu0Vf1=0000:51:11.1 -#PciBusAddoXu0Vf2=0000:51:11.2 -#PciBusAddoXu0Vf3=0000:51:11.3 - -#O-XU 1 -#PciBusAddoXu1Vf0=0000:51:11.4 -#PciBusAddoXu1Vf1=0000:51:11.5 -#PciBusAddoXu1Vf2=0000:51:11.6 -#PciBusAddoXu1Vf3=0000:51:11.7 - -#O-XU 2 -#PciBusAddoXu2Vf0=0000:51:12.0 -#PciBusAddoXu2Vf1=0000:51:12.1 -#PciBusAddoXu2Vf2=0000:51:12.2 -#PciBusAddoXu2Vf3=0000:51:12.3 - # remote O-XU 0 Eth Link 0 oXuRem0Mac0=00:11:22:33:00:00 oXuRem0Mac1=00:11:22:33:00:10 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru2.cfg new file mode 100644 index 0000000..dcf13ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..63d8fe7 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_100mhz/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..a858791 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,56,17,57,18,58,19,59,21,61,22,62,23,63,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..e6d37cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..9ad1d5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,37,6,38,7,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..fb10822 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..819db40 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..129ce72 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..8d93b50 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_du_tst376.dat new file mode 100755 index 0000000..f3d6b83 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_du_tst376.dat @@ -0,0 +1,160 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_10mhz/ant_3.bin #CC0 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_10mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_10mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_10mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_10mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_10mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_10mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_10mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_10mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,24,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,24,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_ru_tst376.dat new file mode 100644 index 0000000..d8e90ee --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/peak_o_ru_tst376.dat @@ -0,0 +1,152 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_10mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_10mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_10mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_10mhz/ant_3.bin #CC0 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,24,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,24,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du.cfg new file mode 100644 index 0000000..2557eaf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x100000000 # mask [0- no workers] +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..b7688d8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx.cfg new file mode 100644 index 0000000..886cbef --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..93b2e0a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..b53e199 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x200 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..7a12455 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx.cfg new file mode 100644 index 0000000..cdb3f83 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8c80029 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_10mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..a858791 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,56,17,57,18,58,19,59,21,61,22,62,23,63,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..e6d37cc --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx.xml new file mode 100644 index 0000000..9ad1d5a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,37,6,38,7,39 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..fb10822 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..819db40 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..129ce72 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..8d93b50 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 23.07 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 1,1,1,1 + + 500, 500, 500, 500 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_du_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_du_tst376.dat new file mode 100755 index 0000000..1327148 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_du_tst376.dat @@ -0,0 +1,160 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_60mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_60mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_60mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_60mhz/ant_3.bin #CC0 + +#DL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of TX elements and K- number of UEs (the same as Layers)] +DlBfwUe0=./usecase/cat_b/mu1_60mhz/dl_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe1=./usecase/cat_b/mu1_60mhz/dl_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe2=./usecase/cat_b/mu1_60mhz/dl_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +DlBfwUe3=./usecase/cat_b/mu1_60mhz/dl_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] + +#UL beamforming weights used based on channel to UE [e.g Wzf = H^H(H*H^H)-1 wher H is MxK matrix, M - number of RX elements and K- number of UEs (the same as Layers)] +UlBfwUe0=./usecase/cat_b/mu1_60mhz/ul_bfw_ue_0.bin #UE0 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe1=./usecase/cat_b/mu1_60mhz/ul_bfw_ue_1.bin #UE1 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe2=./usecase/cat_b/mu1_60mhz/ul_bfw_ue_2.bin #UE2 weights for TRX antennas [antElmTRx x numRBs x slot points] +UlBfwUe3=./usecase/cat_b/mu1_60mhz/ul_bfw_ue_3.bin #UE3 weights for TRX antennas [antElmTRx x numRBs x slot points] + + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,162,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,162,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_ru_tst376.dat b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_ru_tst376.dat new file mode 100644 index 0000000..532628e --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/peak_o_ru_tst376.dat @@ -0,0 +1,152 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +#Peak: 100 % +#301 TDD DDDFU: S it's 6:4:4 1 64T64R 100 16 8 100% 273 3276 100% 273 3276 Peak: 100 % + + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 4) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=2 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R + +#UEs +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +DlLayersPerUe=1 #number of RX anntennas on DL UE side +UlLayersPerUe=1 #number of TX anntennas on UL UE side + + +##Numerology +mu=1 #30Khz Sub Carrier Spacing + +ttiPeriod=500 # in us TTI period (30Khz default 500us) + +nDLAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=3568160 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=60 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=4096 +nULFftSize=4096 + +nFrameDuplexType=1 # 0 - FDD 1 - TDD +nTddPeriod=5 #[0-9] DDDFU, for S it's 10:2:2 +sSlotConfig0=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig1=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig2=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig3=0,0,0,0,0,0,0,0,0,0,2,2,1,1 # (0) - DL (1) - UL (2) - GUARD +sSlotConfig4=1,1,1,1,1,1,1,1,1,1,1,1,1,1 # (0) - DL (1) - UL (2) - GUARD + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/cat_b/mu1_60mhz/ant_0.bin #CC0 +antC1=./usecase/cat_b/mu1_60mhz/ant_1.bin #CC0 +antC2=./usecase/cat_b/mu1_60mhz/ant_2.bin #CC0 +antC3=./usecase/cat_b/mu1_60mhz/ant_3.bin #CC0 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=189 + +srsEnable=0 # Enable (1)| disable (0) SRS + +#DL PRB / % Used RBs UL PRB / % Used RBs +#66% 180 33% 90 + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,162,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwDl0=2,24,0,0,9,1 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,162,0,14,0,1,1,9,1 +# Extension Parameters for Beamforming weights +# numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth +ExtBfwUl0=2,24,0,0,9,1 + +########################################################### + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order +compression=1 # (1) compression enabled (0) compression disabled + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##O-RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +Tadv_cp_dl=25 # in us + # C-Plane messages must arrive at the RU some amount of time in advance (Tcp_adv_dl) of the corresponding U-Plane messages +#Reception Window C-plane DL +T2a_min_cp_dl=259 # 285.42us +T2a_max_cp_dl=669 # 428.12us + +#Reception Window C-plane UL +T2a_min_cp_ul=125 # 285.42us +T2a_max_cp_ul=535 # 428.12us + +#Reception Window U-plane +T2a_min_up=134 # 71.35in us +T2a_max_up=345 # 428.12us + +#Transmission Window +Ta3_min=50 # in us +Ta3_max=171 # in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_min_cp_dl=419 +T1a_max_cp_dl=669 + +##Transmission Window Fast C-plane UL +T1a_min_cp_ul=285 +T1a_max_cp_ul=535 + +#U-plane +##Transmission Window +T1a_min_up=294 #71 + 25 us +T1a_max_up=345 #71 + 25 us + +#Reception Window +Ta4_max=331 # in us +Ta4_max=331 # in us +########################################################### + diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du.cfg new file mode 100644 index 0000000..2557eaf --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du.cfg @@ -0,0 +1,65 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 #core for main() +systemCore=22 +ioCore=28 # core id +#ioWorker=0x000000000 # mask [0- no workers] +#ioWorker=0x8000040000 # mask [0- no workers] +ioWorker=0x100000000 # mask [0- no workers] +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..b7688d8 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du2.cfg @@ -0,0 +1,63 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#ioWorker=0x700000600 + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml +dlCpProcBurst=1 + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx.cfg new file mode 100644 index 0000000..886cbef --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 #core for main() +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..93b2e0a --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + + +oXuCfgFile0=./peak_o_du_tst376.dat #O-DU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru.cfg new file mode 100644 index 0000000..b53e199 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru.cfg @@ -0,0 +1,62 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=0 #core for main() +systemCore=2 +ioCore=8 # core id +#ioWorker=0x800000000 # mask [0- no workers] +#ioWorker=0x800004000 # mask [0- no workers] +#ioWorker=0xc000000 # second socket +ioWorker=0x200 # second socket +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..7a12455 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru2.cfg @@ -0,0 +1,60 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx.cfg new file mode 100644 index 0000000..cdb3f83 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx.cfg @@ -0,0 +1,57 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=18 #core for main() +systemCore=19 +ioCore=20 # core id +ioWorker=0x3E00000 # mask [0- no workers] +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..8c80029 --- /dev/null +++ b/fhi_lib/app/usecase/cat_b/mu1_60mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,58 @@ +#****************************************************************************** +# +# Copyright (c) 2023 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +#===== Test case for 32T32R antElm, 4 DL 2 UL layers , 1 CC ===== +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x1F00000000 # mask [0- no workers] + +dpdkMemorySize=8192 +iovaMode=0 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=2 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) +oXuCPon1Vf=1 # (1) - C- plane and U-plane on the same set of VFs. (0) - C-plane and U-Plane use dedicated VFs + +oXuCfgFile0=./peak_o_ru_tst376.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_du.dat index 796d557..8df2534 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_ru.dat index 57419db..bf47cd0 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -78,8 +76,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/10/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_du.dat index 554fb10..617ae68 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_ru.dat index ac5a5cf..c18993b 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -83,8 +81,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/11/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du.xml index 0d387ec..940e827 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1052f53 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..81c9713 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru.xml index 8068127..b0d02dd 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50sssss diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..e2996bf --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50sssss + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..8bb1aab --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50sssss + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_du.dat index 15ce846..8500513 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_ru.dat index 29a17e1..82386c2 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -98,8 +96,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du2.cfg new file mode 100644 index 0000000..8d22313 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du_icx2.cfg new file mode 100644 index 0000000..1b049d2 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/60/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du.xml index 0d387ec..940e827 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1052f53 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..81c9713 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru.xml index 8068127..8afb777 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..45c4d4c --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..aba2ba8 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_du.dat index 5b489d2..38f88a4 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_ru.dat index b798394..f19b360 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -103,8 +101,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du2.cfg new file mode 100644 index 0000000..8d22313 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du_icx2.cfg new file mode 100644 index 0000000..1b049d2 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/61/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du.xml index ea87359..c6fa908 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru.xml index 8068127..b6fab69 100644 --- a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_du.dat index 8d46ae1..2eb8da7 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_ru.dat index 2f95565..1b16308 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -78,8 +76,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/10/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_du.dat index 3b1489a..64f56a9 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_ru.dat index 7082717..f962505 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -83,8 +81,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/11/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du.xml index 0d387ec..83f7b22 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 10 - 5 + 8 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..25727ca --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..43e58bc --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru.xml index 8068127..4a3f065 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru.xml @@ -41,19 +41,19 @@ 1 - 6 + 10 - 4 + 8 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..c6cdd64 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..5487d14 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_du.dat index ec1a58d..3ac6f55 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_ru.dat index 8abf55f..5e2262b 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -108,8 +106,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du2.cfg new file mode 100644 index 0000000..8d22313 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du_icx2.cfg new file mode 100644 index 0000000..1b049d2 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/60/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du.xml index 0d387ec..83f7b22 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du.xml @@ -41,11 +41,11 @@ 1 - 6 + 10 - 5 + 8 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..25727ca --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..43e58bc --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 10 + + 8 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru.xml index 8068127..8afb777 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..45c4d4c --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..aba2ba8 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_du.dat index ba63733..241e01d 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_ru.dat index f86fc98..bccf4e2 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -128,8 +126,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du2.cfg new file mode 100644 index 0000000..8d22313 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du_icx2.cfg new file mode 100644 index 0000000..1b049d2 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/61/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du.xml index ea87359..c6fa908 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru.xml index 8068127..b6fab69 100644 --- a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_du.dat index ae8a71f..b6ed347 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_ru.dat index 49a4417..92ff9de 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -78,8 +76,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru2.cfg new file mode 100644 index 0000000..aa685c0 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru_icx2.cfg new file mode 100644 index 0000000..5cc618d --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/10/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_du.dat index c6fab97..58e64b2 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_ru.dat index 251bab4..f001b8d 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 numSlots=20 #number of slots per IQ files @@ -83,8 +81,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du2.cfg new file mode 100644 index 0000000..c4bd985 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du_icx2.cfg new file mode 100644 index 0000000..68efc57 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru.cfg index 1ab0180..aebbd23 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/11/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du.xml index 0d387ec..940e827 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..10764f6 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..95dbfde --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru.xml index 8068127..8afb777 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..37be252 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..777053e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_du.dat index cf594ad..e076d36 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_ru.dat index dcddecd..73c462e 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -42,7 +41,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -98,8 +96,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du2.cfg new file mode 100644 index 0000000..3d6d678 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +#oXuCfgFile1=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du_icx2.cfg new file mode 100644 index 0000000..62e6c35 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_du_icx2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x30 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +#oXuCfgFile1=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru.cfg index b24b453..5945107 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x60000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru2.cfg new file mode 100644 index 0000000..4cc6dfa --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x1800000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +#oXuCfgFile1=./config_file_o_ru.dat +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru_icx2.cfg new file mode 100644 index 0000000..605405f --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/60/usecase_ru_icx2.cfg @@ -0,0 +1,71 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x300000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +#oXuCfgFile1=./config_file_o_ru.dat +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du.xml index 0d387ec..940e827 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 6 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..1052f53 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..81c9713 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru.xml index 8068127..8afb777 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru.xml @@ -43,17 +43,17 @@ 6 - 4 + 5 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 - 1 + 6 - 1,1,1,1 + 0,0,0,0,0,0,0,0,0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 - 50, 50, 50, 50 + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..45c4d4c --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..aba2ba8 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 5 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 6 + + 0,0,0,0,0,0,0,0,0,0,0,0 + + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 + + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_du.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_du.dat index d3e226b..e491779 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_du.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_du.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 #ioSleep=1 numSlots=20 #number of slots per IQ files diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_ru.dat b/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_ru.dat index e54c66c..bc408e4 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/config_file_o_ru.dat @@ -17,7 +17,6 @@ #******************************************************************************/ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G-NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -47,7 +46,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 #ioSleep=1 numSlots=20 #number of slots per IQ files @@ -103,8 +101,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du2.cfg new file mode 100644 index 0000000..8d22313 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du_icx2.cfg new file mode 100644 index 0000000..1b049d2 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +#oXuRem0Mac0=b4:96:91:94:de:40 +#oXuRem0Mac1=b4:96:91:94:de:41 +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru.cfg +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru2.cfg new file mode 100644 index 0000000..dcf13ee --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru_icx2.cfg new file mode 100644 index 0000000..63d8fe7 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/61/usecase_ru_icx2.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du.xml index ea87359..c6fa908 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru.xml index 8068127..b6fab69 100644 --- a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/dss/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_du.dat new file mode 100644 index 0000000..43345c9 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_du.dat @@ -0,0 +1,135 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU (0) | RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_10mhz/ant_3.bin #CC0 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 +prachCompMethod=0 +prachiqWidth=8 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,8,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,8,0 +########################################################### + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_ru.dat new file mode 100644 index 0000000..1f33382 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/config_file_o_ru.dat @@ -0,0 +1,140 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=10 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=1024 +nULFftSize=1024 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_10mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_10mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_10mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_10mhz/ant_3.bin #CC0 + +## RACH TODO: update for PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 +prachCompMethod=0 +prachiqWidth=8 + +antPrachC0=./usecase/lte_a/mu0_10mhz/ant_0.bin +antPrachC1=./usecase/lte_a/mu0_10mhz/ant_1.bin +antPrachC2=./usecase/lte_a/mu0_10mhz/ant_2.bin +antPrachC3=./usecase/lte_a/mu0_10mhz/ant_3.bin + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +########################################################### +##Section Settings +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used + +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,8,0 + + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,8,0 +########################################################### + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du.cfg new file mode 100644 index 0000000..e1d0786 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 # core for main() +systemCore=1 # +ioCore=2 # core id +ioWorker=0x000000000000000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuCPon1Vf=1 +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du2.cfg new file mode 100644 index 0000000..add9b36 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x000000000000000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du_icx2.cfg new file mode 100644 index 0000000..add9b36 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_du_icx2.cfg @@ -0,0 +1,54 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x000000000000000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru.cfg new file mode 100644 index 0000000..34a035b --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru.cfg @@ -0,0 +1,56 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 # core for main() +systemCore=20 # +ioCore=21 # core id +ioWorker=0x0000000000400000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuCPon1Vf=1 +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru2.cfg new file mode 100644 index 0000000..ef5cc78 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x0000000000000000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru_icx2.cfg new file mode 100644 index 0000000..9bd64ec --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/8/usecase_ru_icx2.cfg @@ -0,0 +1,55 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system + +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x0000000000000000 # mask [0- no workers] +ioWorker_64_127=0x0000000000000000 + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du.xml index ea87359..c6fa908 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml index 8068127..b6fab69 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_du.dat index b21987e..b4990b2 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 # Eth 0 @@ -91,8 +89,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_ru.dat index c996234..3ffc86e 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 # Eth 0 @@ -97,7 +95,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_10mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du.dat new file mode 100644 index 0000000..8430c87 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du.dat @@ -0,0 +1,160 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU (0) | RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-1200 #get the right value + +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,16,0 +PrbElemDl1=51,49,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,16,0 +PrbElemUl1=51,49,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du_nb.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du_nb.dat new file mode 100644 index 0000000..ee92132 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_du_nb.dat @@ -0,0 +1,167 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU (0) | RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=5 #15Khz Sub Carrier Spacing +freqOffset=0 #add proper value of freqOffset +#nbIot=1 +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +##PRACH +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## NPRACH parameters +#nprachformat=0 +#periodicity=80 +#startTime=8 +#suboffset=12 +#numSubCarriers=24 +#nRep=8 + + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,1,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# Assigning 25950KHz bandwidth to mu1 in this case. +PrbElemUl0=0,1,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru.dat new file mode 100644 index 0000000..b87d2d5 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-1200 #get the right value +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + + +antPrachC0=./usecase/lte_a/mu0_20mhz/ant_0.bin +antPrachC1=./usecase/lte_a/mu0_20mhz/ant_1.bin +antPrachC2=./usecase/lte_a/mu0_20mhz/ant_2.bin +antPrachC3=./usecase/lte_a/mu0_20mhz/ant_3.bin +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,16,0 +PrbElemDl1=51,49,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,16,0 +PrbElemUl1=51,49,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru_nb.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru_nb.dat new file mode 100644 index 0000000..c4cffdf --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/config_file_o_ru_nb.dat @@ -0,0 +1,172 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=5 # mu=5 used for NB-IOT specific configs +freqOffset=0 #add proper value of freqOffset +#nbIot=1 +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +##PRACH +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## NPRACH parameters +#nprachformat=0 +#periodicity=80 +#startTime=8 +#suboffset=12 +#numSubCarriers=24 +#nRep=8 + +antPrachC0=./usecase/lte_a/mu0_20mhz/ant_0.bin +antPrachC1=./usecase/lte_a/mu0_20mhz/ant_1.bin +antPrachC2=./usecase/lte_a/mu0_20mhz/ant_2.bin +antPrachC3=./usecase/lte_a/mu0_20mhz/ant_3.bin + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,1,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# Assigning 25950KHz bandwidth to mu1 in this case. +PrbElemUl0=0,1,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du.cfg new file mode 100644 index 0000000..e582ee8 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du2.cfg new file mode 100644 index 0000000..d2549c2 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du_icx2.cfg new file mode 100644 index 0000000..5eb1ab6 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru.cfg new file mode 100644 index 0000000..e82230e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru2.cfg new file mode 100644 index 0000000..e9f999a --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru2.cfg @@ -0,0 +1,74 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru_icx2.cfg new file mode 100644 index 0000000..ec4aee8 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/20/usecase_ru_icx2.cfg @@ -0,0 +1,74 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du.dat new file mode 100644 index 0000000..8430c87 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du.dat @@ -0,0 +1,160 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU (0) | RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-1200 #get the right value + +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,16,0 +PrbElemDl1=51,49,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,16,0 +PrbElemUl1=51,49,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du_nb.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du_nb.dat new file mode 100644 index 0000000..7a653f1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_du_nb.dat @@ -0,0 +1,169 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=0 # O-DU (0) | RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=5 #15Khz Sub Carrier Spacing +nbIotUlScs=1 +freqOffset=0 #add proper value of freqOffset +#nbIot=1 +eAxcOffset=8 +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +##PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## NPRACH parameters +nprachformat=0 +periodicity=80 +startTime=8 +suboffset=12 +numSubCarriers=24 +nRep=8 + + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,1,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# Assigning 25950KHz bandwidth to mu1 in this case. +PrbElemUl0=0,1,0,14,0,0,0,16,0 + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru.dat new file mode 100644 index 0000000..b87d2d5 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru.dat @@ -0,0 +1,166 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=0 #15Khz Sub Carrier Spacing +freqOffset=-1200 #get the right value +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_0.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_1.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_2.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_3.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +## RACH TODO: update for PRACH +rachEnable=0 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + + +antPrachC0=./usecase/lte_a/mu0_20mhz/ant_0.bin +antPrachC1=./usecase/lte_a/mu0_20mhz/ant_1.bin +antPrachC2=./usecase/lte_a/mu0_20mhz/ant_2.bin +antPrachC3=./usecase/lte_a/mu0_20mhz/ant_3.bin +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +########################################################### +##Section Settings + +nPrbElemDl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,50,0,14,0,0,0,16,0 +PrbElemDl1=51,49,0,14,0,0,0,16,0 + +nPrbElemUl=2 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemUl0=0,50,0,14,0,0,0,16,0 +PrbElemUl1=51,49,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru_nb.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru_nb.dat new file mode 100644 index 0000000..4095789 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/config_file_o_ru_nb.dat @@ -0,0 +1,174 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ + + +# This is simple configuration file. Use '#' sign for comments +appMode=1 # O-DU(0) | O-RU(1) +xranRanTech=1 # 5G NR (0) | LTE (1) +xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) +ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) +antNum=4 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B + +##Numerology +mu=5 # mu=4 used for NB-IOT specific configs +nbIotUlScs=1 +freqOffset=0 #add proper value of freqOffset +#nbIot=1 +eAxcOffset=8 +ttiPeriod=1000 # in us TTI period (15Khz default 1000us) +nDLAbsFrePointA=2645460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nULAbsFrePointA=2525460 #nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 +nDLBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nULBandwidth=20 #Carrier bandwidth for in MHz. Value: 5->400 +nDLFftSize=2048 +nULFftSize=2048 + +nFrameDuplexType=0 # 0 - FDD 1 - TDD +nTddPeriod=0 #TDD priod e.g. DDDS 4 + +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single + #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) +Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec +Gps_Beta=0 + +ioSleep=1 + +# Eth 0 +duMac0=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac0=00:11:22:33:44:55 # O-RU VF for O-RU app +duMac1=00:11:22:33:44:66 # asigned MAC of O-DU VF +ruMac1=00:11:22:33:44:55 # O-RU VF for O-RU app + +#Eth 1 +duMac2=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac2=00:11:22:33:44:44 # O-RU VF for O-RU app +duMac3=00:11:22:33:44:77 # asigned MAC of O-DU VF +ruMac3=00:11:22:33:44:44 # O-RU VF for O-RU app + +numSlots=20 #number of slots per IQ files +antC0=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC0 +antC1=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC0 +antC2=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC0 +antC3=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC0 +antC4=./usecase/lte_a/mu0_20mhz/ant_4.bin #CC1 +antC5=./usecase/lte_a/mu0_20mhz/ant_5.bin #CC1 +antC6=./usecase/lte_a/mu0_20mhz/ant_6.bin #CC1 +antC7=./usecase/lte_a/mu0_20mhz/ant_7.bin #CC1 +antC8=./usecase/lte_a/mu0_20mhz/ant_8.bin #CC2 +antC9=./usecase/lte_a/mu0_20mhz/ant_9.bin #CC2 +antC10=./usecase/lte_a/mu0_20mhz/ant_10.bin #CC2 +antC11=./usecase/lte_a/mu0_20mhz/ant_11.bin #CC2 +antC12=./usecase/lte_a/mu0_20mhz/ant_12.bin #CC3 +antC13=./usecase/lte_a/mu0_20mhz/ant_13.bin #CC3 +antC14=./usecase/lte_a/mu0_20mhz/ant_14.bin #CC3 +antC15=./usecase/lte_a/mu0_20mhz/ant_15.bin #CC3 + +##PRACH +rachEnable=1 # Enable (1)| disable (0) PRACH configuration +prachConfigIndex=14 # PRACH config index as per TS36.211 - Table 5.7.1-2 : PRACH Configuration Index + +## NPRACH parameters +nprachformat=0 +periodicity=80 +startTime=8 +suboffset=12 +numSubCarriers=24 +nRep=8 + +antPrachC0=./usecase/lte_a/mu0_20mhz/ant_8.bin +antPrachC1=./usecase/lte_a/mu0_20mhz/ant_9.bin +antPrachC2=./usecase/lte_a/mu0_20mhz/ant_10.bin +antPrachC3=./usecase/lte_a/mu0_20mhz/ant_11.bin + +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +##Section Settings +nPrbElemDl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +PrbElemDl0=0,1,0,14,0,0,0,16,0 + +nPrbElemUl=1 +#nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType +# weight base beams +# Assigning 25950KHz bandwidth to mu1 in this case. +PrbElemUl0=0,1,0,14,0,0,0,16,0 + + +## control of IQ byte order +iqswap=0 #do swap of IQ before send buffer to eth +nebyteorderswap=1 #do swap of byte order for each I and Q from CPU byte order to network byte order + +##Debug +debugStop=1 #stop app on 1pps boundary (gps_second % 30) +debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary +bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode + +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled + +##RU Settings +totalBFWeights=32 # Total number of Beamforming Weights on RU + +#CID settings +DU_Port_ID_bitwidth=2 +BandSector_ID_bitwidth=3 +CC_ID_bitwidth=3 +RU_Port_ID_bitwidth=8 + +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# O-RAN.WG4.IOT.0-v02.00 +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF + +#U-plane +##Transmission Window +T1a_max_up=437 +T1a_min_up=366 + +#Reception Window U-plane +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + +#Transmission Window +Ta3_max=232 #in us +Ta3_min=70 #in us + +#Reception Window +Ta4_max=392 +Ta4_min=70 + +##Transmission Window Fast C-plane UL +T1a_max_cp_ul=356 +T1a_min_cp_ul=285 + +#Reception Window C-plane UL +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us + +########################################################### +##O-DU Settings +#C-plane +#Transmission Window Fast C-plane DL +T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B +T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B + +#O-RU Reception Window C-plane DL +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +########################################################### + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du.cfg new file mode 100644 index 0000000..e582ee8 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du.cfg @@ -0,0 +1,73 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +ioCore=5 # core id +ioWorker=0x2000000 # mask [0- no workers] +#oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du2.cfg new file mode 100644 index 0000000..d2549c2 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du_icx2.cfg new file mode 100644 index 0000000..5eb1ab6 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_du_icx2.cfg @@ -0,0 +1,76 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +#oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_du_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru.cfg new file mode 100644 index 0000000..c2c4701 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru.cfg @@ -0,0 +1,75 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +ioCore=15 # core id +ioWorker=0x800000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:d8 +# oXuRem0Mac1=b4:96:91:94:dd:d9 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru2.cfg new file mode 100644 index 0000000..b8956c5 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:d8 +# oXuRem0Mac1=b4:96:91:94:dd:d9 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru_icx2.cfg new file mode 100644 index 0000000..6773d0c --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/21/usecase_ru_icx2.cfg @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Copyright (c) 2021 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 +numSecMu=1 #Number of secondary numerologies for XU 0 +oXuSecNumFile0=./config_file_o_ru_nb.dat # RU0 num0 #Secondary numerology files +#oXuSecNumFile1=./config_file_o_du_0.dat # RU0 num0 #Secondary numerology files + + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# oXuRem0Mac0=b4:96:91:94:dd:d8 +# oXuRem0Mac1=b4:96:91:94:dd:d9 + +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du.xml new file mode 100644 index 0000000..c6fa908 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml new file mode 100644 index 0000000..b6fab69 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_du.dat index 22fff2a..c885e9a 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 # Eth 0 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_ru.dat index c7d908a..6292b04 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 # Eth 0 @@ -97,9 +95,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_20mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du.xml index ea87359..c6fa908 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,12,13,33,14,34,15 1 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml index 8068127..a2bfc60 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 16,36,17,37,18,38,19,39,3,23,4,24,5,25,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..41a6b33 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..96a35f2 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_du.dat index ba81fd4..3f8dfe6 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_du.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 ioSleep=1 # Eth 0 @@ -91,8 +89,6 @@ debugStopCount=0 #if this value is >0 then stop app after x transmission packets bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_ru.dat index c0a90bc..c012909 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/config_file_o_ru.dat @@ -18,7 +18,6 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=0 # Category A (0) (precoder in lls-CU) | Category B (1) (precoder in RU) @@ -43,7 +42,6 @@ MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protoco Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 ioSleep=1 # Eth 0 @@ -97,9 +95,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled -c_plane_vlan_tag=1 #VLAN Tag used for C-Plane -u_plane_vlan_tag=2 #VLAN Tag used for U-Plane +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru.cfg index 1ab0180..228f576 100644 --- a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru.cfg @@ -20,6 +20,7 @@ appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system ioCore=15 # core id ioWorker=0x800000000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_a/mu0_5mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_du.dat index 409ef6c..5bc1d20 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,25,0,14,1,1,1,9,1 PrbElemDl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,25,0,0,9,1,1 -ExtBfwDl1=1,25,0,0,9,1,1 +ExtBfwDl0=25,1,0,0,16,0,1 +ExtBfwDl1=25,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,25,0,14,1,1,1,9,1 PrbElemUl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,25,0,0,9,1,1 -ExtBfwUl1=1,25,0,0,9,1,1 +ExtBfwUl0=25,1,0,0,16,0,1 +ExtBfwUl1=25,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_ru.dat index 1375d5e..d35618a 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,25,0,14,1,1,1,9,1 PrbElemDl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,25,0,0,9,1,1 -ExtBfwDl1=1,25,0,0,9,1,1 +ExtBfwDl0=25,1,0,0,16,0,1 +ExtBfwDl1=25,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,25,0,14,1,1,1,9,1 PrbElemUl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,25,0,0,9,1,1 -ExtBfwUl1=1,25,0,0,9,1,1 +ExtBfwUl0=25,1,0,0,16,0,1 +ExtBfwUl1=25,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du.cfg index bd5c7e3..f11b5c2 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x3000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru.xml index 8068127..02263c5 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_du.dat index f6d1ed5..feb210a 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,25,0,14,1,1,1,9,1 PrbElemDl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,25,0,0,9,1,1 -ExtBfwDl1=1,25,0,0,9,1,1 +ExtBfwDl0=25,1,0,0,16,0,1 +ExtBfwDl1=25,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,25,0,14,1,1,1,9,1 PrbElemUl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,25,0,0,9,1,1 -ExtBfwUl1=1,25,0,0,9,1,1 +ExtBfwUl0=25,1,0,0,16,0,1 +ExtBfwUl1=25,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_ru.dat index 71133bb..09363eb 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,25,0,14,1,1,1,9,1 PrbElemDl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,25,0,0,9,1,1 -ExtBfwDl1=1,25,0,0,9,1,1 +ExtBfwDl0=25,1,0,0,16,0,1 +ExtBfwDl1=25,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,25,0,14,1,1,1,9,1 PrbElemUl1=25,25,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,25,0,0,9,1,1 -ExtBfwUl1=1,25,0,0,9,1,1 +ExtBfwUl0=25,1,0,0,16,0,1 +ExtBfwUl1=25,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du.cfg index 54b412b..c524a85 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x3000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_10mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_du.dat index 1f3537c..f1017d7 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,50,0,14,1,1,1,9,1 PrbElemDl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,16,0,1 +ExtBfwDl1=50,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,50,0,14,1,1,1,9,1 PrbElemUl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,16,0,1 +ExtBfwUl1=50,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_ru.dat index 0d55010..d18af32 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,50,0,14,1,1,1,9,1 PrbElemDl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,16,0,1 +ExtBfwDl1=50,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,50,0,14,1,1,1,9,1 PrbElemUl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,16,0,1 +ExtBfwUl1=50,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du.cfg index bd5c7e3..f11b5c2 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x3000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru.xml index 8068127..02263c5 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_du.dat index 18ed8db..46e52a6 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,50,0,14,1,1,1,9,1 PrbElemDl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,16,0,1 +ExtBfwDl1=50,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,50,0,14,1,1,1,9,1 PrbElemUl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,16,0,1 +ExtBfwUl1=50,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_ru.dat index 3f59e10..1dc0895 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,50,0,14,1,1,1,9,1 PrbElemDl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=2,25,0,0,9,1,1 -ExtBfwDl1=2,25,0,0,9,1,1 +ExtBfwDl0=50,1,0,0,16,0,1 +ExtBfwDl1=50,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,50,0,14,1,1,1,9,1 PrbElemUl1=50,50,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=2,25,0,0,9,1,1 -ExtBfwUl1=2,25,0,0,9,1,1 +ExtBfwUl0=50,1,0,0,16,0,1 +ExtBfwUl1=50,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du.cfg index 54b412b..c524a85 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x3000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_20mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_du.dat index 7cb7eb6..d1a72f8 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,15,0,14,1,1,1,9,1 PrbElemDl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,15,0,0,9,1,1 -ExtBfwDl1=1,10,0,0,9,1,1 +ExtBfwDl0=15,1,0,0,16,0,1 +ExtBfwDl1=10,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,15,0,14,1,1,1,9,1 PrbElemUl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,15,0,0,9,1,1 -ExtBfwUl1=1,10,0,0,9,1,1 +ExtBfwUl0=15,1,0,0,16,0,1 +ExtBfwUl1=10,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_ru.dat index c31be8c..eb4427f 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,15,0,14,1,1,1,9,1 PrbElemDl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,15,0,0,9,1,1 -ExtBfwDl1=1,10,0,0,9,1,1 +ExtBfwDl0=15,1,0,0,9,1,1 +ExtBfwDl1=10,1,0,0,9,1,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,15,0,14,1,1,1,9,1 PrbElemUl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,15,0,0,9,1,1 -ExtBfwUl1=1,10,0,0,9,1,1 +ExtBfwUl0=15,1,0,0,9,1,1 +ExtBfwUl1=10,1,0,0,9,1,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du.cfg index 12d06c3..f11b5c2 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=../bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du2.cfg new file mode 100644 index 0000000..ccee425 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du_icx2.cfg new file mode 100644 index 0000000..9d8acd7 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru.cfg index 1ab0180..ac0d143 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=../bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru2.cfg new file mode 100644 index 0000000..95cd008 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru_icx2.cfg new file mode 100644 index 0000000..79974ee --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/1/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=../bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du.xml index ea87359..b269928 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du.xml @@ -45,7 +45,7 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 4,5,6,7,8,9,10,44,45,46,47,48,49,50,51,52,17,37,18,38,19,39 1 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du2.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du2.xml new file mode 100644 index 0000000..6af465a --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,45,6,46,7,47,8,48,9,49,10,50,11,51,12,52,13,53,14,54,15,55,16,56,17,57,18,58,19,59 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml new file mode 100644 index 0000000..d06254e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_du_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 5,61,6,62,7,63,8,64,9,65,10,66,11,67,12,68,13,69,14,70,15,71,16,72,17,73,18,74,19,75,20,76 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru.xml index 8068127..02263c5 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru.xml +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru.xml @@ -45,13 +45,13 @@ 4 - 16,48,17,49,18,50,19,51,20,52,4,44,5,45,22,23,24,25,6,26,7,27,8,28,9,29,10,30,11,31,12,32,13,33,13,34,15,35,16,36,17,37,18,38,19,39 + 13,14,15,16,17,18,19,53,54,55,56,57,58,59,6,26,7,27,8,28 1 - 1,1,1,1 + 0,0,0,0 - 500, 500, 500, 500 + 1000, 1000, 1000, 1000 50, 50, 50, 50 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru2.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru2.xml new file mode 100644 index 0000000..4096a20 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 24,64,25,65,26,66,27,67,28,68,29,69,30,70,31,71,32,72,33,73,34,74,35,75,36,76,37,77,38,78,39,79 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml new file mode 100644 index 0000000..912b5c1 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/bbu_pool_cfg_o_ru_icx2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + 21.03 + + + + 0 + + 1 + + + + + 1024 + + 4 + + 1 + + + + + 1 + + 1 + + 6 + + 4 + + 33,89,34,90,35,91,36,92,37,93,38,94,39,95,40,96,41,97,42,98,43,99,44,100,45,101,46,102,47,103,48,104,49,105,50,106 + + 1 + + 0,0,0,0 + + 1000, 1000, 1000, 1000 + + 50, 50, 50, 50 + + + + + 1 + + + + diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_du.dat b/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_du.dat index 3829947..9ed9fc6 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_du.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_du.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=0 # 0,1,2,... in case more than 1 application started on the same system appMode=0 # O-DU (0) | RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=5 -ioWorker=0x2000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -141,26 +138,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,15,0,14,1,1,1,9,1 PrbElemDl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,15,0,0,9,1,1 -ExtBfwDl1=1,10,0,0,9,1,1 +ExtBfwDl0=15,1,0,0,16,0,1 +ExtBfwDl1=10,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,15,0,14,1,1,1,9,1 PrbElemUl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,15,0,0,9,1,1 -ExtBfwUl1=1,10,0,0,9,1,1 +ExtBfwUl0=15,1,0,0,16,0,1 +ExtBfwUl1=10,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -184,9 +181,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -194,11 +191,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -212,8 +209,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -223,7 +220,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_ru.dat b/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_ru.dat index f7b2385..1dfd326 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_ru.dat +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/config_file_o_ru.dat @@ -18,17 +18,16 @@ # This is simple configuration file. Use '#' sign for comments -instanceId=1 # 0,1,2,... in case more than 1 application started on the same system appMode=1 # O-DU(0) | O-RU(1) xranRanTech=1 # 5G NR (0) | LTE (1) xranMode=1 # Category A (0) (precoder in O-DU) | Category B (1) (precoder in O-RU) ccNum=1 # Number of Componnent Carriers (CC) per ETH port with XRAN protocol (default:1 max: 12) -antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B -antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B +antNum=8 # Number of Antennas per CC (default: 4) or number of Digital streams for Category B +antNumUL=4 # Cat B: UL Number of Antennas per CC (default: 8) or number of UL Digital streams for Category B antElmTRx=32 #number of Antenna Elements for Cat B default 32T32R #UEs -muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources +muMimoUEs=8 #number of UEs serviced by MU-MIMO system. Number of independent beams within the same Freq/Time resources DlLayersPerUe=1 #number of RX anntennas on DL UE side UlLayersPerUe=1 #number of TX anntennas on UL UE side ##Numerology @@ -55,13 +54,11 @@ sSlotConfig7=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig8=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD sSlotConfig9=0,0,0,0,0,0,0,0,0,0,0,0,0,0 # (0) - DL (1) - UL (2) - GUARD -MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single +MTUSize=9600 #maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single #xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) Gps_Alpha=0 #alpha and beta value as in section 9.7.2 of ORAN spec Gps_Beta=0 -ioCore=10 -ioWorker=0x40000000 # mask [0- no workers] ioSleep=1 # Eth 0 @@ -110,26 +107,26 @@ srsSym=8192 # (1<<13) symbol used for SRS (def: sym 13) ########################################################### ##Section Settings -DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used +DynamicSectionEna=1 # 1 - enable dynamic section allocation 0 - static sections all RBs are used extType=1 nPrbElemDl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemDl0=0,15,0,14,1,1,1,9,1 PrbElemDl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwDl0=1,15,0,0,9,1,1 -ExtBfwDl1=1,10,0,0,9,1,1 +ExtBfwDl0=15,1,0,0,16,0,1 +ExtBfwDl1=10,1,0,0,16,0,1 nPrbElemUl=2 #nRBStart, nRBSize, nStartSymb, numSymb, nBeamIndex, bf_weight_update, compMethod, iqWidth, BeamFormingType -# weight base beams +# weight base beams PrbElemUl0=0,15,0,14,1,1,1,9,1 PrbElemUl1=15,10,0,14,2,1,1,9,1 # Extension Parameters for Beamforming weights # numBundPrb, numSetBFW, RAD, disableBFW, bfwIqWidth, bfwCompMeth, extType -ExtBfwUl0=1,15,0,0,9,1,1 -ExtBfwUl1=1,10,0,0,9,1,1 +ExtBfwUl0=15,1,0,0,16,0,1 +ExtBfwUl1=10,1,0,0,16,0,1 ########################################################### ## control of IQ byte order @@ -142,7 +139,7 @@ debugStop=1 #stop app on 1pps boundary (gps_second % 30) debugStopCount=0 #if this value is >0 then stop app after x transmission packets, otherwise app will stop at 1pps boundary bbdevMode=-1 #bbdev mode, -1 = not use bbdev, 0: use software mode, 1: use hardware mode -CPenable=1 #(1) C-Plane is enabled| (0) C-Plane is disabled +CPenable=0 #(1) C-Plane is enabled| (0) C-Plane is disabled ##RU Settings totalBFWeights=32 # Total number of Beamforming Weights on RU @@ -153,9 +150,9 @@ BandSector_ID_bitwidth=3 CC_ID_bitwidth=3 RU_Port_ID_bitwidth=8 -# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF +# LTE-FDD-FR1-CAT-A-NoBF / LTE-FDD-FR1-CAT-A-DBF # O-RAN.WG4.IOT.0-v02.00 -# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF +# Table A.2.3.2-1: LTE FDD IOT Profile 2 - LTE-FDD-FR1-CAT-A-NoBF #U-plane ##Transmission Window @@ -163,11 +160,11 @@ T1a_max_up=437 T1a_min_up=366 #Reception Window U-plane -T2a_max_up=437 -T2a_min_up=206 - -Tadv_cp_dl=125 - +T2a_max_up=437 +T2a_min_up=206 + +Tadv_cp_dl=125 + #Transmission Window Ta3_max=232 #in us Ta3_min=70 #in us @@ -181,8 +178,8 @@ T1a_max_cp_ul=356 T1a_min_cp_ul=285 #Reception Window C-plane UL -T2a_max_cp_ul=356 #in us -T2a_min_cp_ul=125 #in us +T2a_max_cp_ul=356 #in us +T2a_min_cp_ul=125 #in us ########################################################### ##O-DU Settings @@ -192,7 +189,7 @@ T1a_max_cp_dl=562 #in T1a_max_up + Tcp_adv_dl as per Annex B T1a_min_cp_dl=491 #in T1a_min_up + Tcp_adv_dl as per Annex B #O-RU Reception Window C-plane DL -T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B -T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B +T2a_max_cp_dl=562 #in T2a_max_up + Tcp_adv_dl as per Annex B +T2a_min_cp_dl=331 #in T2a_min_up + Tcp_adv_dl as per Annex B ########################################################### diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du.cfg index 84a7872..c524a85 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du.cfg @@ -18,8 +18,8 @@ # This is simple configuration file. Use '#' sign for comments appMode=0 # All O-DU(0) | O-RU(1) instanceId=0 # 0,1,2,... in case more than 1 application started on the same system -ioCore=5 # core id -ioWorker=0x2000000 # mask [0- no workers] +ioCore=2 # core id +ioWorker=0x8 # mask [0- no workers] oXuBbuCfgFile=./bbu_pool_cfg_o_du.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du2.cfg new file mode 100644 index 0000000..031656d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du_icx2.cfg new file mode 100644 index 0000000..dc64e65 --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_du_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=0 # All O-DU(0) | O-RU(1) +instanceId=0 # 0,1,2,... in case more than 1 application started on the same system +mainCore=1 +systemCore=2 +ioCore=3 # core id +ioWorker=0x10 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_du_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_du.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:01.0 +#PciBusAddoXu0Vf1=0000:51:01.1 +#PciBusAddoXu0Vf2=0000:51:01.2 +#PciBusAddoXu0Vf3=0000:51:01.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:01.4 +#PciBusAddoXu1Vf1=0000:51:01.5 +#PciBusAddoXu1Vf2=0000:51:01.6 +#PciBusAddoXu1Vf3=0000:51:01.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:02.0 +#PciBusAddoXu2Vf1=0000:51:02.1 +#PciBusAddoXu2Vf2=0000:51:02.2 +#PciBusAddoXu2Vf3=0000:51:02.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:01 +oXuRem0Mac1=00:11:22:33:00:11 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:21 +oXuRem0Mac3=00:11:22:33:00:31 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:01 +oXuRem1Mac1=00:11:22:33:01:11 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:21 +oXuRem1Mac3=00:11:22:33:01:31 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:01 +oXuRem2Mac1=00:11:22:33:02:11 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:21 +oXuRem2Mac3=00:11:22:33:02:31 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru.cfg index 1ab0180..0222985 100644 --- a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru.cfg +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru.cfg @@ -18,8 +18,9 @@ # This is simple configuration file. Use '#' sign for comments appMode=1 # All O-DU(0) | O-RU(1) instanceId=1 # 0,1,2,... in case more than 1 application started on the same system -ioCore=15 # core id -ioWorker=0x800000000 # mask [0- no workers] +ioCore=11 # core id +ioWorker=0x1000 # mask [0- no workers] +oXuBbuCfgFile=./bbu_pool_cfg_o_ru.xml oXuNum=1 # numbers of O-RU connected to O-DU diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru2.cfg new file mode 100644 index 0000000..ffef11e --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=20 +systemCore=21 +ioCore=22 # core id +ioWorker=0x800000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru_icx2.cfg b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru_icx2.cfg new file mode 100644 index 0000000..7afb81d --- /dev/null +++ b/fhi_lib/app/usecase/lte_b/mu0_5mhz/usecase_ru_icx2.cfg @@ -0,0 +1,72 @@ +#****************************************************************************** +# +# Copyright (c) 2019 Intel. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#******************************************************************************/ +# This is simple configuration file. Use '#' sign for comments +appMode=1 # All O-DU(0) | O-RU(1) +instanceId=1 # 0,1,2,... in case more than 1 application started on the same system +mainCore=29 +systemCore=30 +ioCore=31 # core id +ioWorker=0x100000000 # mask [0- no workers] + +oXuBbuCfgFile=./bbu_pool_cfg_o_ru_icx2.xml + +oXuNum=1 # numbers of O-RU connected to O-DU + +oXuEthLinkSpeed=25 # 10G,25G,40G,100G speed of Physical connection on O-RU +oXuLinesNumber=1 # 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) + +oXuCfgFile0=./config_file_o_ru.dat #O-RU0 + +#O-XU 0 +#PciBusAddoXu0Vf0=0000:51:11.0 +#PciBusAddoXu0Vf1=0000:51:11.1 +#PciBusAddoXu0Vf2=0000:51:11.2 +#PciBusAddoXu0Vf3=0000:51:11.3 + +#O-XU 1 +#PciBusAddoXu1Vf0=0000:51:11.4 +#PciBusAddoXu1Vf1=0000:51:11.5 +#PciBusAddoXu1Vf2=0000:51:11.6 +#PciBusAddoXu1Vf3=0000:51:11.7 + +#O-XU 2 +#PciBusAddoXu2Vf0=0000:51:12.0 +#PciBusAddoXu2Vf1=0000:51:12.1 +#PciBusAddoXu2Vf2=0000:51:12.2 +#PciBusAddoXu2Vf3=0000:51:12.3 + +# remote O-XU 0 Eth Link 0 +oXuRem0Mac0=00:11:22:33:00:00 +oXuRem0Mac1=00:11:22:33:00:10 +# remote O-XU 0 Eth Link 1 +oXuRem0Mac2=00:11:22:33:00:20 +oXuRem0Mac3=00:11:22:33:00:30 + +# remote O-XU 1 Eth Link 0 +oXuRem1Mac0=00:11:22:33:01:00 +oXuRem1Mac1=00:11:22:33:01:10 +# remote O-XU 1 Eth Link 1 +oXuRem1Mac2=00:11:22:33:01:20 +oXuRem1Mac3=00:11:22:33:01:30 + +# remote O-XU 2 Eth Link 0 +oXuRem2Mac0=00:11:22:33:02:00 +oXuRem2Mac1=00:11:22:33:02:10 +# remote O-XU 2 Eth Link 1 +oXuRem2Mac2=00:11:22:33:02:20 +oXuRem2Mac3=00:11:22:33:02:30 diff --git a/fhi_lib/build.sh b/fhi_lib/build.sh index c977b61..6f4da24 100644 --- a/fhi_lib/build.sh +++ b/fhi_lib/build.sh @@ -25,11 +25,25 @@ XRAN_FH_LIB_DIR=$XRAN_DIR/lib XRAN_FH_APP_DIR=$XRAN_DIR/app XRAN_FH_TEST_DIR=$XRAN_DIR/test/test_xran LIBXRANSO=0 -MLOG=0 -COMMAND_LINE= +MLOG=1 +COMMAND_LINE="-j$(nproc) " SAMPLEAPP=0 +MPLANE=0 +POLL_EBBU_OFFLOAD=0 +CODE_COVERAGE=0 + +CLEANFLAG=0 +REBUILD=0 +buildlog_file=$PWD/build_xranlib.log + +function log_print () +{ + echo "$@" + echo "$@" >> $buildlog_file +} echo Number of commandline arguments: $# +echo $1 while [[ $# -ne 0 ]] do key="$1" @@ -48,13 +62,25 @@ case $key in SAMPLEAPP) SAMPLEAPP=1 ;; + MPLANE) + MPLANE=1 + ;; xclean) COMMAND_LINE+=$key COMMAND_LINE+=" " + SAMPLEAPP=1 + CLEANFLAG=1 + ;; + POLL_EBBU_OFFLOAD) + POLL_EBBU_OFFLOAD=1 ;; clean) COMMAND_LINE+=$key COMMAND_LINE+=" " + CLEANFLAG=1 + ;; + cov) + CODE_COVERAGE=1 ;; *) echo $key is unknown command # unknown option @@ -87,34 +113,68 @@ echo "LIBXRANSO = ${LIBXRANSO}" echo "MLOG = ${MLOG}" echo "FWK = ${FWK}" echo "ORU = ${ORU}" +echo "CODE_COVERAGE= ${CODE_COVERAGE}" +echo "BUILD_APP = ${SAMPLEAPP}" cd $XRAN_FH_LIB_DIR -make $COMMAND_LINE MLOG=${MLOG} LIBXRANSO=${LIBXRANSO} ORU=${ORU} +make $COMMAND_LINE MLOG=${MLOG} LIBXRANSO=${LIBXRANSO} ORU=${ORU} CODE_COVERAGE=${CODE_COVERAGE} if [ "$SAMPLEAPP" -eq "1" ] then echo 'Building xRAN O-RU Test Application' cd $XRAN_FH_APP_DIR - make $COMMAND_LINE MLOG=${MLOG} FWK=${FWK} ORU=${ORU} + make $COMMAND_LINE MLOG=${MLOG} FWK=${FWK} ORU=${ORU} CODE_COVERAGE=${CODE_COVERAGE} else echo 'Not building xRAN Test Application...' fi ORU=0 -echo 'Building xRAN Library for O-DU' -echo "LIBXRANSO = ${LIBXRANSO}" -echo "MLOG = ${MLOG}" -echo "FWK = ${FWK}" -echo "ORU = ${ORU}" +if [ -f ${buildlog_file} ]; then + PREVMODE=$(grep "BUILD_MODE_APP" ${buildlog_file} | awk -F= '{ print $2 }') + if [ -z $PREVMODE ]; then + REBUILD=1 + else + if [ "$SAMPLEAPP" -eq "$PREVMODE" ]; then + REBUILD=0 + else + REBUILD=1 + fi + fi +else + REBUILD=1 +fi + +echo "" > ${buildlog_file} +log_print 'Building xRAN Library for O-DU' +log_print "LIBXRANSO = ${LIBXRANSO}" +log_print "MLOG = ${MLOG}" +log_print "FWK = ${FWK}" +log_print "ORU = ${ORU}" +log_print "POLL_EBBU_OFFLOAD = ${POLL_EBBU_OFFLOAD}" +log_print "CODE_COVERAGE = ${CODE_COVERAGE}" +log_print "BUILD_MODE_APP = ${SAMPLEAPP}" +log_print "REBUILD = ${REBUILD}" + +if [ "$CLEANFLAG" -eq "1" ]; then + rm -f ${buildlog_file} + REBUILD=0 +fi + +if [ "$REBUILD" -eq "1" ]; then + echo + echo "*** New build or previous build has different configuration! Rebuilding...." + cd $XRAN_FH_LIB_DIR + make "xclean" MLOG=${MLOG} LIBXRANSO=${LIBXRANSO} ORU=${ORU} SAMPLEAPP=${SAMPLEAPP} POLL_EBBU_OFFLOAD=${POLL_EBBU_OFFLOAD} CODE_COVERAGE=${CODE_COVERAGE} +fi cd $XRAN_FH_LIB_DIR -make $COMMAND_LINE MLOG=${MLOG} LIBXRANSO=${LIBXRANSO} ORU=${ORU} +make $COMMAND_LINE MLOG=${MLOG} LIBXRANSO=${LIBXRANSO} ORU=${ORU} SAMPLEAPP=${SAMPLEAPP} POLL_EBBU_OFFLOAD=${POLL_EBBU_OFFLOAD} CODE_COVERAGE=${CODE_COVERAGE} if [ "$SAMPLEAPP" -eq "1" ] then echo 'Building xRAN O-DU Test Application' -cd $XRAN_FH_APP_DIR - make $COMMAND_LINE MLOG=${MLOG} FWK=${FWK} ORU=${ORU} + cd $XRAN_FH_APP_DIR + make $COMMAND_LINE MLOG=${MLOG} FWK=${FWK} ORU=${ORU} POLL_EBBU_OFFLOAD=${POLL_EBBU_OFFLOAD} CODE_COVERAGE=${CODE_COVERAGE} else echo 'Not building xRAN Test Application...' fi @@ -125,6 +185,6 @@ then else echo 'Building xRAN Test Application ('$GTEST_ROOT')' cd $XRAN_FH_TEST_DIR - make $COMMAND_LINE; + make $COMMAND_LINE POLL_EBBU_OFFLOAD=${POLL_EBBU_OFFLOAD} CODE_COVERAGE=${CODE_COVERAGE} fi diff --git a/fhi_lib/lib/Makefile b/fhi_lib/lib/Makefile index eccc4ae..d0c238c 100644 --- a/fhi_lib/lib/Makefile +++ b/fhi_lib/lib/Makefile @@ -24,11 +24,11 @@ MYCUSTOMSPACE1='------------------------------------------------------------' # Tools configuration ############################################################## ifeq ($(WIRELESS_SDK_TOOLCHAIN),icc) -CC := icc -CPP := icpc -AS := as -AR := ar -LD := icc + CC := icc + CPP := icpc + AS := as + AR := ar + LD := icc else ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) CC := icx CPP := icpx @@ -39,7 +39,14 @@ else $(error "Please define WIRELESS_SDK_TOOLCHAIN environment variable") endif -OBJDUMP := objdump +ifeq ($(WIRELESS_SDK_TARGET_ISA),avx512) + TARGET_PROCESSOR := -march=skylake-avx512 +else ifeq ($(WIRELESS_SDK_TARGET_ISA),snc) + TARGET_PROCESSOR := -march=icelake-server +else ifeq ($(WIRELESS_SDK_TARGET_ISA),spr) + TARGET_PROCESSOR := -march=sapphirerapids +endif + ifeq ($(SHELL),cmd.exe) MD := mkdir.exe -p @@ -55,7 +62,7 @@ ifeq ($(ORU),1) PROJECT_NAME := libxran-oru BUILDDIR := build-oru else -PROJECT_NAME := libxran + PROJECT_NAME := libxran BUILDDIR := build endif PROJECT_TYPE := lib @@ -72,7 +79,7 @@ ifeq ($(RTE_SDK),) endif RTE_TARGET ?= x86_64-native-linux-icc -RTE_INC := $(shell PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk) +RTE_INC := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk) API_DIR := $(PROJECT_DIR)/api SRC_DIR := $(PROJECT_DIR)/src @@ -84,16 +91,16 @@ ifeq ($(MLOG_DIR),) endif endif -CC_SRC = $(ETH_DIR)/ethdi.c \ - $(ETH_DIR)/ethernet.c \ +CC_SRC = $(ETH_DIR)/xran_ethdi.c \ + $(ETH_DIR)/xran_ethernet.c \ $(SRC_DIR)/xran_up_api.c \ $(SRC_DIR)/xran_sync_api.c \ $(SRC_DIR)/xran_timer.c \ - $(SRC_DIR)/xran_cp_api.c \ - $(SRC_DIR)/xran_transport.c \ - $(SRC_DIR)/xran_common.c \ - $(SRC_DIR)/xran_ul_tables.c \ - $(SRC_DIR)/xran_frame_struct.c \ + $(SRC_DIR)/xran_cp_api.c \ + $(SRC_DIR)/xran_transport.c \ + $(SRC_DIR)/xran_common.c \ + $(SRC_DIR)/xran_ul_tables.c \ + $(SRC_DIR)/xran_frame_struct.c \ $(SRC_DIR)/xran_dev.c \ $(SRC_DIR)/xran_rx_proc.c \ $(SRC_DIR)/xran_tx_proc.c \ @@ -109,7 +116,6 @@ CPP_SRC = $(SRC_DIR)/xran_compression.cpp \ $(SRC_DIR)/xran_bfp_cplane16.cpp \ $(SRC_DIR)/xran_bfp_cplane32.cpp \ $(SRC_DIR)/xran_bfp_cplane64.cpp \ - $(SRC_DIR)/xran_bfp_uplane_9b16rb.cpp \ $(SRC_DIR)/xran_bfp_uplane.cpp \ $(SRC_DIR)/xran_mod_compression.cpp @@ -118,13 +124,14 @@ CPP_SRC_SNC = $(SRC_DIR)/xran_compression_snc.cpp \ $(SRC_DIR)/xran_bfp_cplane16_snc.cpp \ $(SRC_DIR)/xran_bfp_cplane32_snc.cpp \ $(SRC_DIR)/xran_bfp_cplane64_snc.cpp \ - $(SRC_DIR)/xran_bfp_uplane_snc.cpp + $(SRC_DIR)/xran_bfp_uplane_snc.cpp \ + $(SRC_DIR)/xran_bfp_uplane_spr.cpp CC_FLAGS += -std=gnu11 -Wall -Wno-deprecated-declarations \ -fdata-sections \ -ffunction-sections \ -g \ - -fPIC \ + -fPIC \ -Wall \ -Wimplicit-function-declaration \ -g -O3 -mcmodel=large @@ -134,7 +141,11 @@ CC_FLAGS += -wd1786 -restrict endif ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) -CC_FLAGS += -march=icelake-server -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error +CC_FLAGS += -mintrinsic-promote $(TARGET_PROCESSOR) -Wno-unused-function -Wno-intrinsic-promote -Wno-error +endif + +ifeq ($(WIRELESS_SDK_TARGET_ISA),spr) + CC_FLAGS += -D_BBLIB_SPR_ -qopt-zmm-usage=high endif CPP_FLAGS := -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_REENTRANT -pipe \ @@ -146,9 +157,12 @@ CPP_FLAGS += -fp-model fast=2 -no-prec-div -no-prec-sqrt -fast-transcendentals endif ifeq ($(WIRELESS_SDK_TOOLCHAIN),icx) -CPP_FLAGS += -fp-model fast -march=icelake-server -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error +CPP_FLAGS += -fp-model fast $(TARGET_PROCESSOR) -mintrinsic-promote -Wno-unused-function -Wno-intrinsic-promote -Wno-error endif +ifeq ($(WIRELESS_SDK_TARGET_ISA),spr) + CPP_FLAGS += -D_BBLIB_SPR_ -qopt-zmm-usage=high +endif INC := -I$(API_DIR) -I$(ETH_DIR) -I$(SRC_DIR) -I$(RTE_INC) DEF := @@ -165,20 +179,30 @@ else DEF += -UXRAN_O_RU_BUILD endif -#DEF += -DFCN_ADAPT -#DEF += -DFCN_1_2_6_EARLIER +ifeq ($(SAMPLEAPP),1) + DEF += -DXRAN_SAMPLEAPP_BUILD +else + DEF += -UXRAN_SAMPLEAPP_BUILD +endif + +ifeq ($(POLL_EBBU_OFFLOAD),1) + DEF += -DPOLL_EBBU_OFFLOAD +else + DEF += -UPOLL_EBBU_OFFLOAD +endif AS_FLAGS := AR_FLAGS := rc PROJECT_OBJ_DIR := $(BUILDDIR)/obj +PROJECT_DEP_DIR := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep.d CC_OBJS := $(patsubst %.c,%.o,$(CC_SRC)) CPP_OBJS := $(patsubst %.cpp,%.o,$(CPP_SRC)) CPP_OBJS_SNC := $(patsubst %.cpp,%.o,$(CPP_SRC_SNC)) AS_OBJS := $(patsubst %.s,%.o,$(AS_SRC)) OBJS := $(CC_OBJS) $(CPP_OBJS) $(CPP_OBJS_SNC) $(AS_OBJS) $(LIBS) -DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS)))) +DIRLIST := $(addprefix $(PROJECT_OBJ_DIR)/,$(sort $(dir $(OBJS)))) $(PROJECT_DEP_DIR) CC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CC_OBJS)) CPP_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS)) @@ -186,17 +210,15 @@ CPP_SNC_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(CPP_OBJS_SNC)) AS_OBJTARGETS := $(addprefix $(PROJECT_OBJ_DIR)/,$(AS_OBJS)) #-qopt-report=5 -qopt-matmul -qopt-report-phase=all -CPP_COMP := -O3 -DNDEBUG -xcore-avx512 -fPIE -fasm-blocks -CPP_COMP_SNC := -O3 -DNDEBUG -march=icelake-server -fPIE -fasm-blocks +CPP_COMP := -O3 -DNDEBUG -fPIE -fasm-blocks +CPP_COMP_SNC := -O3 -DNDEBUG -fPIE -fasm-blocks CC_FLAGS_FULL := $(CC_FLAGS) $(INC) $(DEF) CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF) CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF) AS_FLAGS := $(AS_FLAGS) $(INC) -PROJECT_DEP_FILE := $(PROJECT_OBJ_DIR)/$(PROJECT_NAME).dep - -ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE)) +ifeq ($(wildcard $(PROJECT_DEP_DIR)),$(PROJECT_DEP_DIR)) GENERATE_DEPS := else @@ -206,22 +228,32 @@ CPP_SNC_DEPS := $(addprefix __dep__,$(subst ../,__up__,$(CPP_SRC_SNC))) GENERATE_DEPS := generate_deps endif +#Add CodeCoverage option +ifeq ($(CODE_COVERAGE),1) + CC_FLAGS += -fprofile-instr-generate -fcoverage-mapping + CXX_FLAGS += -fprofile-instr-generate -fcoverage-mapping + LD_FLAGS += -fprofile-instr-generate +endif + all : welcome_line $(PROJECT_BINARY) @echo $(PROJECT_BINARY) .PHONY : clear_dep clear_dep: - @$(RM) $(PROJECT_DEP_FILE) - @echo [DEP] $(subst $(PROJECT_OBJ_DIR)/,,$(PROJECT_DEP_FILE)) + @echo [DEP] rm $(PROJECT_DEP_DIR)/$(@F).dep + @$(RM) $(PROJECT_DEP_DIR)/$(@F).dep -$(CC_DEPS) : - @$(CC) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CC_FLAGS_FULL) >> $(PROJECT_DEP_FILE) +$(CC_DEPS) : $(PROJECT_DEP_DIR) + @echo [DEP] $(subst __up__,../,$(subst __dep__,,$@)) + @$(CC) $(CC_FLAGS_FULL) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.c,%.o,$(subst __up__,../,$(subst __dep__,,$@))) >> $(PROJECT_DEP_DIR)/$(@F).dep -$(CPP_DEPS) : - @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL) >> $(PROJECT_DEP_FILE) +$(CPP_DEPS) : $(PROJECT_DEP_DIR) + @echo [DEP] $(subst __up__,../,$(subst __dep__,,$@)) + @$(CPP) $(CPP_FLAGS_FULL) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) >> $(PROJECT_DEP_DIR)/$(@F).dep -$(CPP_SNC_DEPS) : - @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL_SNC) >> $(PROJECT_DEP_FILE) +$(CPP_SNC_DEPS) : $(PROJECT_DEP_DIR) + @echo [DEP] $(subst __up__,../,$(subst __dep__,,$@)) + @$(CPP) -MM $(subst __up__,../,$(subst __dep__,,$@)) -MT $(PROJECT_OBJ_DIR)/$(patsubst %.cpp,%.o,$(subst __up__,../,$(subst __dep__,,$@))) $(CPP_FLAGS_FULL_SNC) >> $(PROJECT_DEP_DIR)/$(@F).dep .PHONY : generate_deps generate_deps : clear_dep $(CC_DEPS) $(CPP_DEPS) $(CPP_SNC_DEPS) @@ -234,25 +266,25 @@ echo_start_build : $(DIRLIST) : -@$(MD) $@ -$(CC_OBJTARGETS) : +$(CC_OBJTARGETS) : $(GENERATE_DEPS) @echo [CC] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(CC) -c $(CC_FLAGS_FULL) -o"$@" $(patsubst %.o,%.c,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -$(CPP_OBJTARGETS) : +$(CPP_OBJTARGETS) : $(GENERATE_DEPS) @echo [CPP] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(CPP) -c $(CPP_FLAGS_FULL) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -$(CPP_SNC_OBJTARGETS) : +$(CPP_SNC_OBJTARGETS) : $(GENERATE_DEPS) @echo [CPP-SNC] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(CPP) -c $(CPP_FLAGS_FULL_SNC) -o"$@" $(patsubst %.o,%.cpp,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -$(AS_OBJTARGETS) : +$(AS_OBJTARGETS) : $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) @echo [AS] $(subst $(PROJECT_OBJ_DIR)/,,$@) @$(AS) $(AS_FLAGS) -o"$@" $(patsubst %.o,%.s,$(subst $(PROJECT_OBJ_DIR)/,,$@)) -ifeq ($(wildcard $(PROJECT_DEP_FILE)),$(PROJECT_DEP_FILE)) +ifeq ($(wildcard $(PROJECT_DEP_DIR)),$(PROJECT_DEP_DIR)) -include $(PROJECT_DEP_FILE) +include $(PROJECT_DEP_DIR)/* endif @@ -264,13 +296,14 @@ clean: xclean: clean ifneq ($(wildcard $(PROJECT_DIR)/$(PROJECT_MAKE)),) @echo [XCLEAN] : $(PROJECT_NAME) - @$(RM) $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_FILE) + @$(RM) -rf $(PROJECT_BINARY) $(PROJECT_BINARY_LIB) $(PROJECT_DEP_DIR) endif .PHONY : welcome_line welcome_line : @echo $(MYCUSTOMSPACE) @echo Building $(PROJECT_BINARY) + @echo $(MYCUSTOMTAB)TARGET_PROCESSOR = $(TARGET_PROCESSOR) @echo $(MYCUSTOMTAB)RTE_TARGET = $(RTE_TARGET) @echo $(MYCUSTOMSPACE) @@ -280,7 +313,7 @@ welcome_line : debug : all release : all -$(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(PRE_BUILD) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS) +$(PROJECT_BINARY) : $(DIRLIST) echo_start_build $(GENERATE_DEPS) $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS) @echo [AR] $(subst $(BUILDDIR)/,,$@) ifeq ($(XRAN_LIB_SO),) @$(AR) $(AR_FLAGS) $@ $(CC_OBJTARGETS) $(CPP_OBJTARGETS) $(CPP_SNC_OBJTARGETS) $(AS_OBJTARGETS) diff --git a/fhi_lib/lib/api/xran_compression.h b/fhi_lib/lib/api/xran_compression.h index 5dc088f..df68590 100644 --- a/fhi_lib/lib/api/xran_compression.h +++ b/fhi_lib/lib/api/xran_compression.h @@ -70,6 +70,8 @@ struct xranlib_decompress_request { int16_t csf; /*!< 1-bit constellation shift flag defined in section 5.4.7.4 */ uint16_t ScaleFactor; /*!< Scale factor as defined in section A.5*/ int32_t len; /*!< Length of input data. */ + int16_t SprEnable; /*!< whether enable spr data cvt int16 to fp16 ,0 - disable/1 - enable */ + float fScale; /*!< Scale of the spr data cvt */ }; /*! @@ -156,9 +158,15 @@ xranlib_decompress_avx512_bfw(const struct xranlib_decompress_request *request, int32_t xranlib_decompress_avxsnc_bfw(const struct xranlib_decompress_request *request, struct xranlib_decompress_response *response); +int32_t +xranlib_decompress_5gisa(const struct xranlib_decompress_request *request, + struct xranlib_decompress_response *response); //! @} +extern int gCpuCapability; +#define XRANLIB_COMPAND_CHECK_CPU_CAPABILITY() ((gCpuCapability == 1) || (gCpuCapability == 2)) + #ifdef __cplusplus } #endif diff --git a/fhi_lib/lib/api/xran_compression.hpp b/fhi_lib/lib/api/xran_compression.hpp index 9ca8561..8dbcf6d 100644 --- a/fhi_lib/lib/api/xran_compression.hpp +++ b/fhi_lib/lib/api/xran_compression.hpp @@ -138,4 +138,9 @@ namespace BlockFloatCompander /// Control-Plane specific compression and expansion functions for 64 antennas void BFPCompressCtrlPlane64AvxSnc(const ExpandedData& dataIn, CompressedData* dataOut); void BFPExpandCtrlPlane64AvxSnc(const CompressedData& dataIn, ExpandedData* dataOut); + +#ifdef _BBLIB_SPR_ + void BFPExpandUserPlaneSpr(const CompressedData& dataIn, ExpandedData* dataOut, float fScale); + void BFPExpandRefSpr(const CompressedData& dataIn, ExpandedData* dataOut, float fScale); +#endif } diff --git a/fhi_lib/lib/api/xran_cp_api.h b/fhi_lib/lib/api/xran_cp_api.h index 6a461f3..6bcae5e 100644 --- a/fhi_lib/lib/api/xran_cp_api.h +++ b/fhi_lib/lib/api/xran_cp_api.h @@ -58,7 +58,7 @@ enum xran_cp_sectiontype { XRAN_CP_SECTIONTYPE_6 = 6, /**< Channel Information, not supported */ XRAN_CP_SECTIONTYPE_7 = 7, /**< LAA, not supported */ XRAN_CP_SECTIONTYPE_MAX - }; +}; /** Filter index, defined in 5.4.4.3 */ enum xran_cp_filterindex { @@ -68,8 +68,10 @@ enum xran_cp_filterindex { XRAN_FILTERINDEX_PRACH_ABC = 3, /**< UL filter for PRACH preamble format A1~3, B1~4, C0, C2 */ XRAN_FILTERINDEX_NPRACH = 4, /**< UL filter for NPRACH */ XRAN_FILTERINDEX_LTE4 = 5, /**< UL filter for PRACH preamble format LTE-4 */ - XRAN_FILTERINDEX_MAX - }; + XRAN_FILTERINDEX_NPUSCH_375 = 10, /**< UL filter for NPUSCH 3.75KHz */ + XRAN_FILTERINDEX_NPUSCH_15 = 11, /**< UL filter for NPUSCH 15KHz */ + XRAN_FILTERINDEX_MAX = 12 +}; /** Maximum Slot Index, defined in 5.4.4.6 */ #define XRAN_SLOTID_MAX 16 @@ -84,7 +86,7 @@ enum xran_cp_fftsize { XRAN_FFTSIZE_4096 = 12, /* 4096 */ XRAN_FFTSIZE_1536 = 13, /* 1536 */ XRAN_FFTSIZE_MAX - }; +}; /** Sub-carrier spacing, defined in 5.4.4.13 Table 5.10 */ enum xran_cp_subcarrierspacing { /*3GPP u, SCS, Nslot, Slot len */ @@ -98,21 +100,21 @@ enum xran_cp_subcarrierspacing { /*3GPP u, SCS, Nslot, Slot len */ XRAN_SCS_5KHZ = 14, /* NA, 5kHz, 1, 1ms */ XRAN_SCS_7P5KHZ = 15, /* NA, 7.5kHz, 1, 1ms */ XRAN_SCS_MAX - }; +}; /** Resource block indicator, defined in 5.4.5.2 */ enum xran_cp_rbindicator { XRAN_RBIND_EVERY = 0, /**< every RB used */ XRAN_RBIND_EVERYOTHER = 1, /**< every other RB used */ XRAN_RBIND_MAX - }; +}; /** Symbol number increment command, defined in 5.4.5.3 */ enum xran_cp_symbolnuminc { XRAN_SYMBOLNUMBER_NOTINC = 0, /**< do not increment the current symbol number */ XRAN_SYMBOLNUMBER_INC = 1, /**< increment the current symbol number and use that */ XRAN_SYMBOLNUMBER_INC_MAX - }; +}; /** Macro to convert the number of PRBs as defined in 5.4.5.6 */ #define XRAN_CONVERT_NUMPRBC(x) ((x) > 255 ? 0 : (x)) @@ -157,7 +159,7 @@ enum xran_cp_sectionextcmd { XRAN_CP_SECTIONEXTCMD_10 = 10, /**< Multiple ports grouping */ XRAN_CP_SECTIONEXTCMD_11 = 11, /**< Flexible BF weights */ XRAN_CP_SECTIONEXTCMD_MAX /* 12~127 reserved for future use */ - }; +}; /** Macro to convert bfwIqWidth defined in 5.4.7.1.1, Table 5-15 */ #define XRAN_CONVERT_BFWIQWIDTH(x) ((x) > 15 ? 0 : (x)) @@ -170,7 +172,7 @@ enum xran_cp_bfw_compression_method { XRAN_BFWCOMPMETHOD_ULAW = 3, /**< compressed I/Q value */ XRAN_BFWCOMPMETHOD_BEAMSPACE = 4, /**< beamspace I/Q coefficient */ XRAN_BFWCOMPMETHOD_MAX /* reserved for future methods */ - }; +}; /** Beamforming Attributes Bitwidth 5.4.7.2.1 */ enum xran_cp_bfa_bitwidth { @@ -182,7 +184,7 @@ enum xran_cp_bfa_bitwidth { XRAN_BFABITWIDTH_6BIT = 5, /**< the filed is 6-bit bitwidth */ XRAN_BFABITWIDTH_7BIT = 6, /**< the filed is 7-bit bitwidth */ XRAN_BFABITWIDTH_8BIT = 7, /**< the filed is 8-bit bitwidth */ - }; +}; /** Layer ID for DL transmission in TM1-TM4 5.4.7.3.2 */ #define XRAN_LAYERID_0 0 /**< Layer 0 */ @@ -218,20 +220,25 @@ enum xran_cp_rbgsize { #define XRAN_MAX_NUMPORTC_EXT10 64 /* defined in 5.4.7.10.2 */ +typedef struct tXPrachFRAKbarStruct +{ + uint8_t nRbRa; + uint8_t kbar; +} XPrachFRAKbarStruct; + /** * This structure contains the information to generate the section body of C-Plane message */ struct xran_section_info { /** for U-plane */ struct xran_section_desc sec_desc[XRAN_NUM_OF_SYMBOL_PER_SLOT]; int32_t freqOffset; /* X 24bits */ - uint32_t startPrbc:9; /* X X X X X 9bits */ - uint32_t numPrbc:9; /* X X X X X 8bits */ /* will be converted to zero if >255 */ + uint32_t startPrbc:10; /* X X X X X 9bits */ + uint32_t numPrbc:10; /* X X X X X 8bits */ /* will be converted to zero if >255, need 10bits here internally */ uint32_t type:4; /* type of this section */ - /* section type bit- */ - /* 0 1 3 5 6 7 length */ + /* section type bit- */ + /* 0 1 3 5 6 7 length */ uint32_t startSymId:4; /* X X X X X X 4bits */ uint32_t numSymbol:4; /* X X X X 4bits */ - uint32_t res:2; uint16_t beamId; /* X X 15bits */ uint16_t ueId; /* X X 15bits */ uint16_t regFactor; /* X 16bits */ @@ -261,8 +268,8 @@ struct xran_sectionext1_info { uint8_t blockScaler; uint8_t compBitWidthShift; uint8_t activeBeamspaceCoeffMask[XRAN_MAX_BFW_N]; /* ceil(N/8)*8, should be multiple of 8 */ - } bfwCompParam; - }; + } bfwCompParam; +}; struct xran_sectionext2_info { uint8_t bfAzPtWidth; /* beamforming zenith beamwidth parameter */ @@ -276,7 +283,7 @@ struct xran_sectionext2_info { uint8_t bfAzSI; uint8_t bfZeSI; - }; +}; struct xran_sectionext3_info { uint8_t codebookIdx; @@ -290,13 +297,13 @@ struct xran_sectionext3_info { uint16_t beamIdAP1; uint16_t beamIdAP2; uint16_t beamIdAP3; - }; +}; struct xran_sectionext4_info { uint8_t csf; uint8_t pad0; uint16_t modCompScaler; - }; +}; struct xran_sectionext5_info { uint8_t num_sets; @@ -305,7 +312,7 @@ struct xran_sectionext5_info { uint16_t mcScaleReMask; uint16_t mcScaleOffset; } mc[XRAN_MAX_MODCOMP_ADDPARMS]; - }; +}; struct xran_sectionext6_info { uint8_t rbgSize; @@ -384,7 +391,7 @@ struct xran_sectionext_info { uint16_t type; uint16_t len; void *data; - }; +}; /** * This structure contains the information to generate the section header of C-Plane message */ @@ -404,14 +411,14 @@ struct xran_cp_header_params { uint8_t numUEs; /* X 8bits */ uint16_t timeOffset; /* X X 16bits */ uint16_t cpLength; /* X X 16bits */ - }; +}; /** The structure for the generation of section extension */ struct xran_section_ext_gen_info { uint16_t type; /**< the type of section extension */ uint16_t len; /**< length of extension data */ void *data; /**< pointer to extension data */ - }; +}; /** * This structure to hold the information to generate the sections of C-Plane message */ @@ -435,7 +442,7 @@ struct xran_cp_gen_params { /**< The information for C-Plane message header */ struct xran_section_gen_info *sections; /**< Array of the section information */ - }; +}; /** The structure to store received section extension */ struct xran_section_ext_recv_info { @@ -475,7 +482,7 @@ struct xran_cp_recv_params { uint32_t tti; /** #include #include +#include +#include "rte_ether.h" +#ifdef POLL_EBBU_OFFLOAD +#include "xran_timer.h" +#endif #define XRAN_STATUS_SUCCESS (0) /**< @@ -106,24 +111,34 @@ extern "C" { /** Macro to calculate Slot number */ #define XranGetSlotNum(tti, numSlotPerSfn) ((uint32_t)tti % ((uint32_t)numSlotPerSfn)) +#define XRAN_MAX_FH_CORES (10) /**< Maximum number of XRAN FH cores supported */ #define XRAN_PORTS_NUM (8) /**< number of XRAN ports (aka O-RU|O-DU devices) supported */ #define XRAN_ETH_PF_LINKS_NUM (4) /**< number of Physical Ethernet links per one O-RU|O-DU */ -#define XRAN_MAX_PRACH_ANT_NUM (4) /**< number of XRAN Prach ports supported */ - -#if defined(XRAN_O_RU_BUILD) - #define XRAN_N_FE_BUF_LEN (20) /**< Number of TTIs (slots) */ +#define XRAN_MAX_PRACH_ANT_NUM (8) /**< number of XRAN Prach ports supported */ +#define XRAN_MAX_NUM_MU (6) /**< Maximum number of numerologies defined in the standard. */ +#define XRAN_MAX_NUM_PRACH_MU (5) /**< Maximum number of prach numerologies used in FlexRAN */ +#define XRAN_DEFAULT_MU XRAN_MAX_NUM_MU /**< primary numerology for given ru/xranport will be used when this value is provided by L1 */ +#define XRAN_MAX_MTU (9600) +#define XRAN_NBIOT_MU (5) /**< numerology number to use for nb-iot */ +#define XRAN_INTRA_SYM_MAX_DIV (4) /*Maximum number of divisions of a symbol*/ +#define XRAN_MAX_RU_ETH_POINTS (2) /* the number of RU used eth points. 1 or 2*/ +#define XRAN_MAX_AUX_BBDEV_NUM (3) + +#if (defined(XRAN_O_RU_BUILD) || defined(XRAN_SAMPLEAPP_BUILD)) + #define XRAN_N_FE_BUF_LEN (20) /**< Number of TTIs (slots) */ #else -#define XRAN_N_FE_BUF_LEN (20) /**< Number of TTIs (slots) */ + #define XRAN_N_FE_BUF_LEN (10) /**< Number of TTIs (slots) */ #endif -#define XRAN_MAX_SECTOR_NR (16) /**< Max sectors per XRAN port */ +#define XRAN_MAX_SECTOR_NR (40) /**< Max sectors per XRAN port */ #define XRAN_MAX_ANTENNA_NR (16) /**< Max number of extended Antenna-Carriers: - a data flow for a single antenna (or spatial stream) for a single carrier in a single sector */ + a data flow for a single antenna (or spatial stream) for a single carrier in a single sector */ /* see 10.2 Hierarchy of Radiation Structure in O-RU (assume TX and RX panel are the same dimensions)*/ #define XRAN_MAX_PANEL_NR (1) /**< Max number of Panels supported per O-RU */ #define XRAN_MAX_TRX_ANTENNA_ARRAY (1) /**< Max number of TX and RX arrays per panel in O-RU */ #define XRAN_MAX_ANT_ARRAY_ELM_NR (64) /**< Maximum number of Antenna Array Elemets in Antenna Array in the O-RU */ +#define XRAN_MAX_CSIRS_PORTS (32) /**< Max number of CSI-RS Ports */ #define XRAN_NUM_OF_SYMBOL_PER_SLOT (14) /**< Number of symbols per slot */ #define XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT XRAN_NUM_OF_SYMBOL_PER_SLOT /**< Max Number of SRS symbols per slot */ @@ -136,17 +151,27 @@ extern "C" { #define XRAN_MAX_DSS_PERIODICITY (15) /**< Max DSS pattern period */ -#define XRAN_MAX_SECTIONS_PER_SLOT (273) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */ +#define XRAN_MAX_SECTIONS_PER_SLOT (32) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */ #define XRAN_MIN_SECTIONS_PER_SLOT (6) /**< Min number of different sections in single slot (section may be equal to RB allocation for UE) */ #define XRAN_MAX_SECTIONS_PER_SYM (XRAN_MAX_SECTIONS_PER_SLOT) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */ #define XRAN_MIN_SECTIONS_PER_SYM (XRAN_MIN_SECTIONS_PER_SLOT) /**< Min number of different sections in single slot (section may be equal to RB allocation for UE) */ +#define XRAN_SSB_MAX_NUM_SC (240) /**< 3GPP TS 38.211 - 7.4.3.1 Time-frequency structure of an SS/PBCH block */ +#define XRAN_SSB_MAX_NUM_PRB (XRAN_SSB_MAX_NUM_SC / XRAN_NUM_OF_SC_PER_RB) -#define XRAN_MAX_FRAGMENT (4) /**< Max number of fragmentations in single symbol */ +#define XRAN_MAX_FRAGMENT (2) /**< Max number of fragmentations in single symbol */ +#define XRAN_MAX_RX_PKT_PER_SYM (32) /**< Max number of packets received in single symbol */ #define XRAN_MAX_SET_BFWS (64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */ #define XRAN_MAX_PKT_BURST (448+4) /**< 4x14x8 symbols per ms */ #define XRAN_N_MAX_BUFFER_SEGMENT XRAN_MAX_PKT_BURST /**< Max number of segments per ms */ +#define NUM_MBUFS_SMALL (16383) /** optimal is n = (2^q - 1) */ +#define NUM_MBUFS_VF_SMALL (131071) +#define NUM_MBUFS 65535 /** optimal is n = (2^q - 1) */ +#define NUM_MBUFS_VF (1048575) +#define NUM_MBUFS_RING (NUM_MBUFS+1) /** The size of the ring (must be a power of 2) */ + + #define XRAN_STRICT_PARM_CHECK (1) /**< enable parameter check for C-plane */ /* Slot type definition */ @@ -169,7 +194,7 @@ extern "C" { //#define _XRAN_VERBOSE /**< Enable verbose log */ #define MX_NUM_SAMPLES (16)/**< MAX Number of Samples for One Way delay Measurement */ -#define XRAN_VF_QUEUE_MAX (XRAN_MAX_ANTENNA_NR*2+XRAN_MAX_ANT_ARRAY_ELM_NR) /**< MAX number of HW queues for given VF */ +#define XRAN_VF_QUEUE_MAX (XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR*2+XRAN_MAX_ANT_ARRAY_ELM_NR) /**< MAX number of HW queues for given VF */ #define XRAN_HALF_CB_SYM 0 /**< Half of the Slot (offset +7) */ #define XRAN_THREE_FOURTHS_CB_SYM 3 /**< 2/4 of the Slot (offset +7) */ @@ -204,6 +229,11 @@ extern "C" { __FILE__, \ __LINE__, ##__VA_ARGS__) +#define PRINT_NON_ZERO_CNTR(counter,str,fmt) \ + if(counter != 0){ \ + printf(fmt,str,counter); \ + } + enum XranFrameDuplexType { XRAN_FDD = 0, XRAN_TDD @@ -217,6 +247,11 @@ enum xran_if_state XRAN_OWDM }; +typedef enum xran_vMu_proc_type_e { + XRAN_VMU_PROC_SSB, + XRAN_VMU_PROC_MAX +} xran_vMu_proc_type_t; + /** ****************************************************************************** * @ingroup xran @@ -278,6 +313,14 @@ enum xran_weight_based_beamforming_type { XRAN_BF_T_MAX }; +typedef enum xran_lbm_state_e { + XRAN_LBM_STATE_INIT = 0, + XRAN_LBM_STATE_IDLE = 1, + XRAN_LBM_STATE_TRANSMITTING = 2, + XRAN_LBM_STATE_WAITING = 3, + XRAN_LBM_STATE_MAX = 4 +} xran_lbm_state; + /** contains time related information according to type of event */ struct xran_sense_of_time { enum cb_per_sym_type_id type_of_event; /**< event type id */ @@ -295,10 +338,13 @@ typedef int32_t xran_status_t; /**< Xran status return value */ typedef int32_t (*xran_callback_sym_fn)(void*, struct xran_sense_of_time* p_sense_of_time); /** Callback function type for TTI event */ -typedef int32_t (*xran_fh_tti_callback_fn)(void*); +typedef int32_t (*xran_fh_tti_callback_fn)(void*, uint8_t mu); /** Callback function type packet arrival from transport layer (ETH or IP) */ -typedef void (*xran_transport_callback_fn)(void*, xran_status_t); +typedef void (*xran_transport_callback_fn)(void*, xran_status_t, uint8_t mu); + +/** Callback function type OAM cb */ +typedef int32_t (*xran_callback_oam_notify_fn)(void*, uint8_t vfId, uint8_t lbmStatus); /** Callback functions to poll BBdev encoder */ typedef int16_t (*phy_encoder_poll_fn)(void); @@ -306,6 +352,12 @@ typedef int16_t (*phy_encoder_poll_fn)(void); /** Callback functions to poll BBdev decoder */ typedef int16_t (*phy_decoder_poll_fn)(void); +/** Callback functions to poll BBdev SRS FFT */ +typedef int16_t (*phy_srs_fft_poll_fn)(void); + +/** Callback functions to poll BBdev PRACH IFFT */ +typedef int16_t (*phy_prach_ifft_poll_fn)(void); + /** XRAN port enum */ enum xran_vf_ports { @@ -355,7 +407,7 @@ enum xran_category /** type of beamforming */ enum xran_beamforming_type { - XRAN_BEAM_ID_BASED = 0, /**< beam index based */ + XRAN_BEAM_ID_BASED = 0, /**< beam index based */ XRAN_BEAM_WEIGHT = 1, /**< beam forming weights */ XRAN_BEAM_ATTRIBUTE = 2, /**< beam index based */ XRAN_BEAM_TYPE_MAX @@ -365,12 +417,49 @@ enum xran_beamforming_type enum xran_bbdev_init { XRAN_BBDEV_NOT_USED = -1, /**< BBDEV is disabled */ - XRAN_BBDEV_MODE_HW_OFF = 0, /**< BBDEV is enabled for SW sim mode */ - XRAN_BBDEV_MODE_HW_ON = 1, /**< BBDEV is enable for HW */ + XRAN_BBDEV_MODE_HW_OFF = 0, /**< BBDEV is enabled for SW sim mode */ + XRAN_BBDEV_MODE_HW_ON = 1, /**< BBDEV is enable for HW */ XRAN_BBDEV_MODE_HW_SW = 2, /**< BBDEV for SW and HW is enabled */ XRAN_BBDEV_MODE_MAX }; +/** XRAN-PHY interface byte order */ +enum xran_input_byte_order { + XRAN_NE_BE_BYTE_ORDER = 0, /**< Network byte order (Big endian), xRAN lib doesn't do swap */ + XRAN_CPU_LE_BYTE_ORDER /**< CPU byte order (Little endian), xRAN lib does do swap */ +}; + +/** XRAN-PHY interface I and Q order */ +enum xran_input_i_q_order { + XRAN_I_Q_ORDER = 0, /**< I , Q */ + XRAN_Q_I_ORDER /**< Q , I */ +}; + +typedef enum +{ + XRAN_NBIOT_UL_SCS_15, + XRAN_NBIOT_UL_SCS_3_75, +}nbiot_ul_scs; + + +enum xran_memstat_index +{ + XRAN_MEMSTAT_MAXNUM = 0, + XRAN_MEMSTAT_AVAIL, + XRAN_MEMSTAT_INUSE, + XRAN_MEMSTAT_END +}; + +struct xran_memstat +{ + uint32_t socket_direct[XRAN_MEMSTAT_END]; + uint32_t socket_indirect[XRAN_MEMSTAT_END]; + uint32_t pktgen[XRAN_MEMSTAT_END]; + uint32_t vf_rx[16][RTE_MAX_QUEUES_PER_PORT][XRAN_MEMSTAT_END]; + uint32_t vf_small[16][XRAN_MEMSTAT_END]; +}; + + /** callback return information */ struct xran_cb_tag { uint16_t cellId; @@ -414,26 +503,32 @@ struct xran_ecpri_del_meas_port { /** DPDK IO configuration for XRAN layer */ struct xran_io_cfg { - uint8_t id; /**< should be (0) for O-DU or (1) O-RU (debug) */ - uint8_t num_vfs; /**< number of VFs for C-plane and U-plane (should be even) */ + uint8_t id; /**< should be (0) for O-DU or (1) O-RU (debug) */ + uint8_t num_vfs; /**< number of VFs for C-plane and U-plane (should be even) */ uint16_t num_rxq; /**< number of RX queues per VF */ - char *dpdk_dev[XRAN_VF_MAX]; /**< VFs devices */ - char *bbdev_dev[1]; /**< BBDev dev name */ - int32_t bbdev_mode; /**< DPDK for BBDev */ - uint32_t dpdkIoVaMode; /**< IOVA Mode */ - uint32_t dpdkMemorySize; /**< DPDK max memory allocation */ + char *dpdk_dev[XRAN_VF_MAX]; /**< VFs devices */ + char *bbdev_dev[1]; /**< BBDev dev name */ + int32_t bbdev_mode; /**< DPDK for BBDev */ + char *bbdev_devx[XRAN_MAX_AUX_BBDEV_NUM]; /**< BBDev other dev name */ + int32_t bbdevx_num; /**< DPDK for other BBDev */ + int32_t dpdkProcessType; /**< DPDK init Process type */ + uint32_t nDpdkProcessID; /**< DPDK init Process Id tag, use for different L1app with the same file-prefix */ + uint32_t dpdkIoVaMode; /**< IOVA Mode */ + uint32_t dpdkMemorySize; /**< DPDK max memory allocation */ int32_t core; /**< reserved */ int32_t system_core; /**< reserved */ uint64_t pkt_proc_core; /**< worker mask 0-63 */ uint64_t pkt_proc_core_64_127; /**< worker mask 64-127 */ int32_t pkt_aux_core; /**< reserved */ - int32_t timing_core; /**< core used by xRAN */ - int32_t port[XRAN_VF_MAX]; /**< VFs ports */ - int32_t io_sleep; /**< enable sleep on PMD cores */ + int32_t timing_core; /**< core used by xRAN */ + int32_t port[XRAN_VF_MAX]; /**< VFs ports */ + int32_t io_sleep; /**< enable sleep on PMD cores */ uint32_t nEthLinePerPort; /**< 1, 2, 3 total number of links per O-RU (Fronthaul Ethernet link) */ uint32_t nEthLineSpeed; /**< 10G,25G,40G,100G speed of Physical connection on O-RU */ - int32_t one_vf_cu_plane; /**< 1 - C-plane and U-plane use one VF */ - struct xran_ecpri_del_meas_cmn eowd_cmn[2];/** FDD, 1 -> TDD */ - uint8_t nNumerology; /**< Numerology, determine sub carrier spacing, Value: 0->4 - 0: 15khz, 1: 30khz, 2: 60khz - 3: 120khz, 4: 240khz */ uint8_t nTddPeriod; /**< TDD period */ struct xran_slot_config sSlotConfig[XRAN_MAX_TDD_PERIODICITY]; /**< TDD Slot configuration - If nFrameDuplexType = TDD(1), then this config defines the slot config type for each slot.*/ /* The number of slots need to be equal to nTddPeriod */ }; -/** XRAN-PHY interface byte order */ -enum xran_input_byte_order { - XRAN_NE_BE_BYTE_ORDER = 0, /**< Network byte order (Big endian), xRAN lib doesn't do swap */ - XRAN_CPU_LE_BYTE_ORDER /**< CPU byte order (Little endian), xRAN lib does do swap */ -}; - -/** XRAN-PHY interface I and Q order */ -enum xran_input_i_q_order { - XRAN_I_Q_ORDER = 0, /**< I , Q */ - XRAN_Q_I_ORDER /**< Q , I */ -}; - /** XRAN front haul O-RU settings */ struct xran_ru_config { enum xran_ran_tech xranTech; /**< 5GNR or LTE */ @@ -633,33 +919,36 @@ struct xran_ru_config { uint8_t iqWidth; /**< IQ bit width */ uint8_t compMeth; /**< Compression method */ uint8_t iqWidth_PRACH; /**< IQ bit width for PRACH */ - uint8_t compMeth_PRACH; /**< Compression method for PRACH */ - uint8_t fftSize; /**< FFT Size */ + uint8_t compMeth_PRACH; /**< Compression method for PRACH */ + uint8_t fftSize[XRAN_MAX_NUM_MU]; /**< FFT Size */ enum xran_input_byte_order byteOrder; /**< Order of bytes in int16_t in buffer. Big or little endian */ enum xran_input_i_q_order iqOrder; /**< order of IQs in the buffer */ uint16_t xran_max_frame; /**< max frame number supported */ }; -/** - * @ingroup xran - * XRAN front haul general configuration */ -struct xran_fh_config { - uint32_t dpdk_port; /**< DPDK port number used for FH */ - uint32_t sector_id; /**< Band sector ID for FH */ - uint32_t nCC; /**< number of Component carriers supported on FH */ - uint32_t neAxc; /**< number of eAxc supported on one CC*/ - uint32_t neAxcUl; /**< number of eAxc supported on one CC for UL direction */ - uint32_t nAntElmTRx; /**< Number of antenna elements for TX and RX */ - uint16_t nDLFftSize; /**< DL FFT size */ - uint16_t nULFftSize; /**< UL FFT size */ - uint16_t nDLRBs; /**< DL PRB */ - uint16_t nULRBs; /**< UL PRB */ - uint32_t nDLAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ - uint32_t nULAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ - uint32_t nDLCenterFreqARFCN; /**< center frequency for DL in MHz */ - uint32_t nULCenterFreqARFCN; /**< center frequency for UL in MHz */ - xran_fh_tti_callback_fn ttiCb; /**< call back for TTI event */ - void *ttiCbParam; /**< parameters of call back function */ +/* Application should allocate memory for this structure per port and update it per tti. + * Xran will access cplane and uplane shared buffers for active numerologies and send the packets out for that tti. + * Note: TTI of the given numerology will be considered. + */ +typedef struct xran_active_numerologies_per_tti +{ + bool numerology[XRAN_N_FE_BUF_LEN][XRAN_MAX_NUM_MU]; +}xran_active_numerologies_per_tti; + +typedef struct xran_fh_per_mu_cfg +{ + uint32_t nDLBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ + uint32_t nULBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ + struct xran_prach_config prach_conf; + int32_t freqOffset; + + uint16_t nDLFftSize; /**< DL FFT size */ + uint16_t nULFftSize; /**< UL FFT size */ + + uint8_t eaxcOffset; /* Starting value of Eaxc for PDSCH, PUSCH packets (Absolute value) of this numerology. Should be unique across all numerologies for the RU */ + + uint16_t nDLRBs; /**< DL PRB */ + uint16_t nULRBs; /**< UL PRB */ uint16_t Tadv_cp_dl; /**< Table 2 7 : xRAN Delay Management Model Parameters */ uint16_t T2a_min_cp_dl; /**< Table 2 7 : xRAN Delay Management Model Parameters */ @@ -679,28 +968,71 @@ struct xran_fh_config { uint16_t Ta4_min; /**< Table 2 7 : xRAN Delay Management Model Parameters */ uint16_t Ta4_max; /**< Table 2 7 : xRAN Delay Management Model Parameters */ - uint8_t enableCP; /**< enable C-plane */ uint8_t prachEnable; /**< enable PRACH */ + uint8_t prachConfigIndex;/**< TS36.211 - Table 5.7.1-2 : PRACH Configuration Index */ + uint8_t prachConfigIndexLTE;/**< PRACH Configuration Index for LTE in dss case*/ + + nbiot_ul_scs nbIotUlScs; /**< Applicable only for NB-IOT (mu=4). NBIOT supports asymmetric SCS usage in + downlink and uplink directions. xran library will use this parameter to derive + slot-duration for UL NB-IOT: + XRAN_NBIOT_UL_SCS_15: slot-duration=1ms + XRAN_NBIOT_UL_SCS_3_75: slot-duration=2ms */ + uint16_t adv_tx_time; /**Time by which the packet should be transmitted in advance (microseconds)*/ + +} xran_fh_per_mu_cfg; + +/** + * @ingroup xran + * XRAN front haul general configuration */ +struct xran_fh_config { + uint32_t dpdk_port; /**< DPDK port number used for FH */ + uint32_t sector_id; /**< Band sector ID for FH */ + uint32_t nCC; /**< number of Component carriers supported on FH */ + uint32_t neAxc; /**< number of eAxc supported on one CC*/ + uint32_t neAxcUl; /**< number of eAxc supported on one CC for UL direction */ + uint32_t nAntElmTRx; /**< Number of antenna elements for TX and RX */ + uint32_t nDLAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ + uint32_t nULAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ + uint32_t nDLCenterFreqARFCN; /**< center frequency for DL in MHz */ + uint32_t nULCenterFreqARFCN; /**< center frequency for UL in MHz */ + xran_fh_tti_callback_fn ttiCb; /**< call back for TTI event */ + void *ttiCbParam; /**< parameters of call back function */ + xran_fh_per_mu_cfg perMu[XRAN_MAX_NUM_MU]; + uint8_t mu_number[XRAN_MAX_NUM_MU]; + + uint8_t enableCP; /**< enable C-plane */ + uint8_t dropPacketsUp; /**< enable droping the up channel packets if they miss timing window */ uint8_t srsEnable; /**< enable SRS (Cat B specific) */ uint8_t srsEnableCp; /**< enable SRS Cp(Cat B specific) */ uint8_t SrsDelaySym; /**< enable SRS Cp(Cat B specific) */ uint8_t puschMaskEnable;/**< enable pusch mask> */ uint8_t puschMaskSlot; /**< specific which slot pusch channel masked> */ - uint8_t cp_vlan_tag; /**< C-plane vlan tag */ - uint8_t up_vlan_tag; /**< U-plane vlan tag */ + uint8_t csirsEnable; /**< enable CSI-RS (Cat B specific) */ int32_t debugStop; /**< enable auto stop */ int32_t debugStopCount; /**< enable auto stop after number of Tx packets */ int32_t DynamicSectionEna; /**< enable dynamic C-Plane section allocation */ int32_t GPS_Alpha; // refer to alpha as defined in section 9.7.2 of ORAN spec. this value should be alpha*(1/1.2288ns), range 0 - 1e7 (ns) int32_t GPS_Beta; //beta value as defined in section 9.7.2 of ORAN spec. range -32767 ~ +32767 - - struct xran_prach_config prach_conf; /**< PRACH specific configurations for FH */ + uint8_t numMUs; // Number of numerologies + uint8_t nNumerology[XRAN_MAX_NUM_MU]; /**< Numerology, determine sub carrier spacing, Value: 0->4 + 0: 15khz, 1: 30khz, 2: 60khz + 3: 120khz, 4: 240khz. + At least 1 numerology must be configured. First specified numerology will be considered + primary numerology and rest will be considered secondary numerologies. Secondary + numerologies can be dynamically scheduled or completely turned off. */ + // int32_t freqOffset[XRAN_MAX_NUM_MU]; + uint16_t RemoteMACvalid; + uint16_t numRemoteMAC; + struct rte_ether_addr RemoteMAC[XRAN_MAX_RU_ETH_POINTS]; struct xran_srs_config srs_conf; /**< SRS specific configurations for FH */ struct xran_frame_config frame_conf; /**< frame config */ struct xran_ru_config ru_conf; /**< config of RU as per XRAN spec */ + struct xran_csirs_config csirs_conf; /**< CSI-RS specific configurations for FH */ phy_encoder_poll_fn bbdev_enc; /**< call back to poll BBDev encoder */ phy_decoder_poll_fn bbdev_dec; /**< call back to poll BBDev decoder */ + phy_srs_fft_poll_fn bbdev_srs_fft; /**< call back to poll BBDev SRS FFT */ + phy_prach_ifft_poll_fn bbdev_prach_ifft; /**< call back to poll BBDev PRACH IFFT */ uint16_t tx_cp_eAxC2Vf[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR*2 + XRAN_MAX_ANT_ARRAY_ELM_NR]; /**< mapping of C-Plane (ecpriRtcid) or U-Plane (ecpriPcid) to VF */ uint16_t tx_up_eAxC2Vf[XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR*2 + XRAN_MAX_ANT_ARRAY_ELM_NR]; /**< mapping of C-Plane (ecpriRtcid) or U-Plane (ecpriPcid) to VF */ @@ -717,12 +1049,83 @@ struct xran_fh_config { uint8_t dssEnable; /**< enable DSS (extension-9) */ uint8_t dssPeriod; /**< DSS pattern period for LTE/NR */ uint8_t technology[XRAN_MAX_DSS_PERIODICITY]; /**< technology array represents slot is LTE(0)/NR(1) */ + xran_active_numerologies_per_tti *activeMUs; /**< Should be set per slot to true or false indicating whether + this numerology is active in this slot */ +}; + + +struct xran_cc_init +{ + int16_t ccId; /* Carrier component ID */ + + enum xran_category ruCat; /**< mode: Catergory A or Category B */ /* cannot be different within RU?? */ + enum xran_ran_tech ranTech; /**< 5GNR or LTE */ + enum xran_comp_hdr_type cmpHdrType; /**< dynamic or static udCompHdr handling */ + + uint8_t iqWidth; /**< IQ bit width */ + uint8_t compMeth; /**< Compression method */ + uint8_t iqWidth_PRACH; /**< IQ bit width for PRACH */ + uint8_t compMeth_PRACH; /**< Compression method for PRACH */ + + uint32_t neAxc; /**< number of eAxc supported on this CC */ + uint32_t neAxcUl; /**< number of eAxc supported on this CC for UL direction */ + uint32_t nAntElmTRx; /**< Number of antenna elements for TX and RX */ + uint32_t nDLAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ + uint32_t nULAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */ + uint32_t nDLCenterFreqARFCN;/**< Center frequency for DL in MHz */ + uint32_t nULCenterFreqARFCN;/**< Center frequency for UL in MHz */ + + uint32_t nDLBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ + uint32_t nULBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */ + uint16_t nDLFftSize; /**< DL FFT size */ + uint16_t nULFftSize; /**< UL FFT size */ + uint16_t nDLRBs; /**< DL PRB */ + uint16_t nULRBs; /**< UL PRB */ + int32_t freqOffset; + + uint8_t nNumerology; /**< Numerology, determine sub carrier spacing, Value: 0->4 + 0: 15khz, 1: 30khz, 2: 60khz + 3: 120khz, 4: 240khz. */ + uint8_t prachEnable; /**< enable PRACH */ + //uint8_t prachConfigIndex;/**< TS36.211 - Table 5.7.1-2 : PRACH Configuration Index */ + //uint8_t prachConfigIndexLTE;/**< PRACH Configuration Index for LTE in dss case*/ + uint8_t enableCP; /**< enable C-plane */ + uint8_t srsEnable; /**< enable SRS (Cat B specific) */ + uint8_t srsEnableCp; /**< enable SRS Cp(Cat B specific) */ + uint8_t SrsDelaySym; /**< enable SRS Cp(Cat B specific) */ + uint8_t puschMaskEnable; /**< enable pusch mask> */ + uint8_t puschMaskSlot; /**< specific which slot pusch channel masked> */ + uint8_t csirsEnable; /**< enable CSI-RS (Cat B specific) */ + int32_t DynamicSectionEna; /**< enable dynamic C-Plane section allocation */ + + struct xran_prach_config prach_pri; /* PRACH configuration for primary (in case of DSS) */ + struct xran_prach_config prach_2nd; /* PRACH configuration for secondary (in case of DSS) */ + struct xran_frame_config frame_conf;/**< frame config */ + struct xran_srs_config srs_conf; /**< SRS specific configurations for FH */ + struct xran_csirs_config csirs_conf;/**< CSI-RS specific configurations for FH */ + + uint16_t maxSectionsPerSlot; /**< M-Plane settings for section */ + uint16_t maxSectionsPerSymbol; /**< M-Plane settings for section */ + int32_t RunSlotPrbMapBySymbolEnable; /**< enable prb mapping by symbol with multisection*/ + + uint8_t dssEnable; /**< enable DSS (extension-9) */ + uint8_t dssPeriod; /**< DSS pattern period for LTE/NR */ + uint8_t technology[XRAN_MAX_DSS_PERIODICITY]; /**< technology array represents slot is LTE(0)/NR(1) */ + xran_active_numerologies_per_tti *activeMUs; /**< Should be set per slot to true or false indicating whether + this numerology is active in this slot */ + + nbiot_ul_scs nbIotUlScs; /**< Applicable only for NB-IOT (mu=4). NBIOT supports asymmetric SCS usage in + downlink and uplink directions. xran library will use this parameter to derive + slot-duration for UL NB-IOT: + XRAN_NBIOT_UL_SCS_15: slot-duration=1ms + XRAN_NBIOT_UL_SCS_3_75: slot-duration=2ms */ }; /** * @ingroup xran * XRAN front haul statistic counters according to Table 7 1 : Common Counters for both DL and UL */ struct xran_common_counters{ + uint64_t gps_second; uint64_t Rx_on_time; /**< Data was received on time (applies to user data reception window) */ uint64_t Rx_early; /**< Data was received too early (applies to user data reception window) */ uint64_t Rx_late; /**< Data was received too late (applies to user data reception window) */ @@ -732,21 +1135,45 @@ struct xran_common_counters{ /* debug statistis */ uint64_t rx_counter; + uint64_t old_rx_counter; + uint64_t rx_counter_pps; uint64_t tx_counter; + uint64_t old_tx_counter; + uint64_t tx_counter_pps; uint64_t tx_bytes_counter; + uint64_t old_tx_bytes_counter; uint64_t rx_bytes_counter; + uint64_t old_rx_bytes_counter; uint64_t tx_bytes_per_sec; + uint64_t tx_bits_per_sec; uint64_t rx_bytes_per_sec; + uint64_t rx_bits_per_sec; uint64_t rx_pusch_packets[XRAN_MAX_ANTENNA_NR]; uint64_t rx_prach_packets[XRAN_MAX_ANTENNA_NR]; uint64_t rx_srs_packets; + uint64_t rx_csirs_packets; uint64_t rx_invalid_ext1_packets; /**< Counts the invalid extType-1 packets - valid for packets received from O-DU*/ uint64_t timer_missed_sym; uint64_t timer_missed_slot; +#ifdef POLL_EBBU_OFFLOAD + uint64_t timer_missed_sym_window; +#endif + + /* Error counters */ + uint32_t rx_err_drop; /**< Table 9.1-1 The total number of inbound messages which are discarded by the receiving O-RAN entity for any reason */ + + uint32_t rx_err_up; /** < (Internal counter) Number of packets dropped due to errors in UP data section header */ + uint32_t rx_err_pusch; /** < (Internal counter) Number of PUSCH packets dropped due to errors in UP data section header */ + uint32_t rx_err_csirs; /** < (Internal counter) Number of CSI-RS packets dropped due to errors in UP data section header */ + uint32_t rx_err_srs; /** < (Internal counter) Number of SRS packets dropped due to errors in UP data section header */ + uint32_t rx_err_prach; /** < (Internal counter) Number of PRACH packets dropped due to errors in UP data section header */ + uint32_t rx_err_cp; /** < (Internal counter) Number of packets dropped due to errors in CP section header */ + uint32_t rx_err_ecpri; /** < (Internal counter) Number of packets dropped due to error in eCPRI header */ }; + /** * @ingroup xran * CC instance handle pointer type */ @@ -765,14 +1192,14 @@ typedef void * xran_cc_handle_t; struct xran_flat_buffer { uint32_t nElementLenInBytes; /**< The Element length specified in bytes. - * This parameter specifies the size of a single element in the buffer. - * The total size of the buffer is described as - * bufferSize = nElementLenInBytes * nNumberOfElements */ + * This parameter specifies the size of a single element in the buffer. + * The total size of the buffer is described as + * bufferSize = nElementLenInBytes * nNumberOfElements */ uint32_t nNumberOfElements; /**< The number of elements in the physical contiguous memory segment */ uint32_t nOffsetInBytes; /**< Offset in bytes to the start of the data in the physical contiguous - * memory segment */ - uint8_t *pData; /**< The data pointer is a virtual address */ - void *pCtrl; /**< pointer to control section coresponding to data buffer */ + * memory segment */ + uint8_t *pData; /**< The data pointer is a virtual address */ + void *pCtrl; /**< pointer to control section coresponding to data buffer */ void *pRing; /**< pointer to ring with prepared mbufs */ }; @@ -785,7 +1212,7 @@ struct xran_flat_buffer * A Scatter/Gather buffer list structure. It is expected that this buffer * structure will be used where more than one flat buffer can be provided * on a particular API. - * + * *****************************************************************************/ struct xran_buffer_list { @@ -813,6 +1240,18 @@ struct xran_buffer_list */ int32_t xran_init(int argc, char *argv[], struct xran_fh_init *p_xran_fh_init, char *appName, void ** pHandle); +/** + * @ingroup xran + * Clean XRAN Layer resources. + * + * @param + * NONE + * + * @return + * NONE + */ +void xran_cleanup(void); + /** * @ingroup xran * @@ -835,120 +1274,243 @@ int32_t xran_sector_get_instances (uint32_t xran_port, void * pDevHandle, uint16 /** * @ingroup xran * - * Function initialize Memory Management subsystem (mm) in order to handle memory buffers between XRAN layer - * and PHY. + * Function frees the allocated handle for the sectors. * - * @param pHandle - * Pointer to XRAN layer handle for given CC - * @param nMemorySize - * memory size of all segments - * @param nMemorySegmentSize - * size of memory per segment + * @param pSectorInstanceHandles + * Pointer to xran_cc_handle_t which has the handle pointer * * @return * 0 - on success */ -int32_t xran_mm_init (void * pHandle, uint64_t nMemorySize, uint32_t nMemorySegmentSize); +int32_t xran_sector_free_instance(xran_cc_handle_t *pSectorInstanceHandle); /** * @ingroup xran * - * Function allocates buffer memory (bm) used between XRAN layer and PHY. In general case it's DPDK mbuf. - * it uses Memory Management system to get memory chunk and define memory pool on top of it. - * - * @param pHandle - * Pointer to XRAN layer handle for given CC - * @param nPoolIndex - * pointer to buffer pool identification to be returned - * @param nNumberOfBuffers - * number of buffer to allocate in the pool - * @param nBufferSize - * buffer size to allocate + * Function initialize Memory Management leak detector in order to calculate allocated memory through DPDK * * @return * 0 - on success */ -int32_t xran_bm_init (void * pHandle, uint32_t * pPoolIndex, uint32_t nNumberOfBuffers, uint32_t nBufferSize); +uint32_t xran_mem_mgr_leak_detector_init(void); /** * @ingroup xran * - * Function allocates buffer used between XRAN layer and PHY. In general case it's DPDK mbuf. - * - * @param pHandle - * Pointer to XRAN layer handle for given CC - * @param nPoolIndex - * buffer pool identification - * @param ppData - * Pointer to pointer where to store address of new buffer - * @param ppCtrl - * Pointer to pointer where to store address of internal private control information - * + * Function destroy Memory Management leak detector * * @return - * 0 - on success + * */ -int32_t xran_bm_allocate_buffer(void * pHandle, uint32_t nPoolIndex, void **ppData, void **ppCtrl); +void xran_mem_mgr_leak_detector_destroy(void); /** * @ingroup xran * - * Function allocates buffer used between XRAN layer and PHY. In general case it's DPDK mbuf. + * @description + * Forms memory leak detector final output message * - * @param pHandle - * Pointer to XRAN layer handle for given CC - * @param rng_name_prefix - * prefix of ring name - * @param cc_id - * Component Carrier ID - * @param buff_id - * Buffer id for given ring - * @param ant_id - * Antenna id for given ring - * @param symb_id - * Symbol id for given ring - * @param ppRing - * Pointer to pointer where to store address of internal DDPD ring + * @param[in] last - 32-bit flag indicating that function will be called last time * * @return * 0 - on success */ -int32_t xran_bm_allocate_ring(void * pHandle, const char *rng_name_prefix, uint16_t cc_id, uint16_t buff_id, uint16_t ant_id, uint16_t symb_id, void **ppRing); +uint32_t xran_mem_mgr_leak_detector_display(uint32_t last); + +typedef uint32_t(*xran_mem_mgr_leak_detector_add_cb_fn) (uint32_t nSize, char *pString, void* pMemBlk); +typedef uint32_t(*xran_mem_mgr_leak_detector_remove_cb_fn)(void* pMemBlk); /** * @ingroup xran * - * Function frees buffer used between XRAN layer and PHY. In general case it's DPDK mbuf + * @description + * Registers external leak detector functions * - * @param pHandle - * Pointer to XRAN layer handle for given CC - * @param pData - * Pointer to buffer - * @param pData - * Pointer to internal private control information + * @param[in] pxRANAddFn - Pointer to Add function + * @param[in] pxRANRemoveFn - Pointer to Remove function * * @return * 0 - on success + * -1 - on failure */ -int32_t xran_bm_free_buffer(void * pHandle, void *pData, void *pCtrl); +int32_t xran_mem_mgr_leak_detector_register_cb_fn(xran_mem_mgr_leak_detector_add_cb_fn pxRANAddFn, xran_mem_mgr_leak_detector_remove_cb_fn pxRANRemoveFn); /** * @ingroup xran * - * Function destroys Memory Management (MM) layer of XRAN library + * Function allocates memory of given size from DPDK * - * @param pHandle - * Pointer to XRAN layer handle for given CC + * @param buf_len + * buffer size * * @return - * 0 - on success + * buf_len - size of memory allocation */ -int32_t xran_mm_destroy (void * pHandle); - +void* xran_malloc(char *name, size_t buf_len, uint32_t align); +void* xran_zmalloc(char *name, size_t buf_len, uint32_t align); /** * @ingroup xran * - * Function configures TX(DL) and RX(UL) output buffers and callback (UL only) for XRAN layer with + * Function frees memory of given size from heap + * + * @param buf_len + * addr - pointer to buffer + * + * @return + * void + */ +void xran_free(void *addr); + +struct rte_mempool * xran_pktmbuf_pool_create(const char *name, unsigned int n, + unsigned int cache_size, uint16_t priv_size, uint16_t data_room_size, int socket_id); + +/** + * @ingroup xran + * + * Function initialize Memory Management subsystem (mm) in order to handle memory buffers between XRAN layer + * and PHY. + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param nMemorySize + * memory size of all segments + * @param nMemorySegmentSize + * size of memory per segment + * + * @return + * 0 - on success + */ +int32_t xran_mm_init (void * pHandle, uint64_t nMemorySize, uint32_t nMemorySegmentSize); + +/** + * @ingroup xran + * + * Function allocates buffer memory (bm) used between XRAN layer and PHY. In general case it's DPDK mempool. + * it uses Memory Management system to get memory chunk and define memory pool on top of it. + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param nPoolIndex + * pointer to buffer pool identification to be returned + * @param nNumberOfBuffers + * number of buffer to allocate in the pool + * @param nBufferSize + * buffer size to allocate + * + * @return + * 0 - on success + */ +int32_t xran_bm_init (void * pHandle, uint32_t * pPoolIndex, uint32_t nNumberOfBuffers, uint32_t nBufferSize); + +/** + * @ingroup xran + * + * Function free buffer memory (bm) pool used between XRAN layer and PHY. In general case it's DPDK mempool. + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param nPoolIndex + * pointer to buffer pool identification to be returned + * + * @return + * 0 - on success + */ +int32_t xran_bm_release(void *pHandle, uint32_t *pPoolIndex); + +/** + * @ingroup xran + * + * Function allocates buffer used between XRAN layer and PHY. In general case it's DPDK mbuf. + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param nPoolIndex + * buffer pool identification + * @param ppData + * Pointer to pointer where to store address of new buffer + * @param ppCtrl + * Pointer to pointer where to store address of internal private control information + * + * + * @return + * 0 - on success + */ +int32_t xran_bm_allocate_buffer(void * pHandle, uint32_t nPoolIndex, void **ppData, void **ppCtrl); + +/** + * @ingroup xran + * + * Function allocates ring buffer used between XRAN layer and PHY. + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param rng_name_prefix + * prefix of ring name + * @param cc_id + * Component Carrier ID + * @param buff_id + * Buffer id for given ring + * @param ant_id + * Antenna id for given ring + * @param symb_id + * Symbol id for given ring + * @param ppRing + * Pointer to pointer where to store address of internal DPDK ring + * + * @return + * 0 - on success + */ +int32_t xran_bm_allocate_ring(void * pHandle, const char *rng_name_prefix, uint16_t cc_id, uint16_t buff_id, uint16_t ant_id, uint16_t symb_id, void **ppRing); + +/** + * @ingroup xran + * + * Function free ring + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pRing + * Pointer to ring structure + * + * @return + * 0 - on success + */ +int32_t xran_bm_free_ring(void *pHandle, void *pRing); + +/** + * @ingroup xran + * + * Function frees buffer used between XRAN layer and PHY. In general case it's DPDK mbuf + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pData + * Pointer to buffer + * @param pData + * Pointer to internal private control information + * + * @return + * 0 - on success + */ +int32_t xran_bm_free_buffer(void * pHandle, void *pData, void *pCtrl); + +/** + * @ingroup xran + * + * Function destroys Memory Management (MM) layer of XRAN library + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * + * @return + * 0 - on success + */ +int32_t xran_mm_destroy (void * pHandle); + +/** + * @ingroup xran + * + * Function configures TX(DL) and RX(UL) output buffers and callback (UL only) for XRAN layer with * given handle * * @param pHandle @@ -965,6 +1527,8 @@ int32_t xran_mm_destroy (void * pHandle); * Callback function to call with arrival of all packets for given CC for given symbol * @param pCallbackTag * Parameters of Callback function + * @param mu + * Numerology for which to call this callback * * @return * 0 - on success @@ -976,7 +1540,7 @@ int32_t xran_mm_destroy (void * pHandle); struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, - void *pCallbackTag); + void *pCallbackTag, uint8_t mu); /** * @ingroup xran @@ -991,6 +1555,8 @@ int32_t xran_mm_destroy (void * pHandle); * Callback function to call with arrival of PRACH packets for given CC * @param pCallbackTag * Parameters of Callback function + * @param mu + * Numerology for which to call this callback * * @return * 0 - on success @@ -998,9 +1564,9 @@ int32_t xran_mm_destroy (void * pHandle); */ int32_t xran_5g_prach_req (void * pHandle, struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], - struct xran_buffer_list *pDstBufferDecomp[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pDstBufferDecomp[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, - void *pCallbackTag); + void *pCallbackTag, uint8_t mu); /** * @ingroup xran @@ -1015,6 +1581,8 @@ int32_t xran_5g_prach_req (void * pHandle, * Callback function to call with arrival of SRS packets for given CC * @param pCallbackTag * Parameters of Callback function + * @param mu + * Numerology for which to call this callback * * @return * 0 - on success @@ -1024,8 +1592,113 @@ int32_t xran_5g_srs_req (void * pHandle, struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, + void *pCallbackTag, uint8_t mu); + +/** + * @ingroup xran + * Function configures CSI-RS input buffers to deliver CSIRS IQs from PHY layer to xran + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pSrcBuffer + * list of memory buffers to use to deliver CSIRS IQs from PHY layer to xran + * @param mu + * Numerology for which to call this callback + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_5g_csirs_config (void * pHandle, + struct xran_buffer_list *pSrcBuffer[XRAN_MAX_CSIRS_PORTS][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pSrcCpBuffer[XRAN_MAX_CSIRS_PORTS][XRAN_N_FE_BUF_LEN], + xran_transport_callback_fn pCallback, + void *pCallbackTag,uint8_t mu); + + +int32_t xran_5g_ssb_config(uint8_t ssbMu, + uint8_t actualMu, + void *pHandle, + struct xran_buffer_list *pSsbTxBuf[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pSsbTxPrbBuf[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN]); + +/** + * @ingroup xran + * + * Function configures TX(DL) and RX(UL) output buffers and callback (UL only) for XRAN layer with + * given handle + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pSrcBuffer + * list of memory buffers to use to fetch IQs from PHY to XRAN layer (DL) + * @param pSrcCpBuffer + * list of memory buffers to use to configure C-plane (DL) + * @param pDstBuffer + * list of memory buffers to use to deliver IQs from XRAN layer to PHY (UL) + * @param pDstCpBuffer + * list of memory buffers to use to configure C-plane (UL) + * @param xran_transport_callback_fn pCallback + * Callback function to call with arrival of all packets for given CC for given symbol + * @param pCallbackTag + * Parameters of Callback function + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_lte_fronthault_config(void *pHandle, + struct xran_buffer_list *pSrcBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pSrcCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + xran_transport_callback_fn pCallback, + void *pCallbackTag); +/** + * @ingroup xran + * + * Function configures PRACH output buffers and callback for XRAN layer with given handle + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pDstBuffer + * list of memory buffers to use to deliver PRACH IQs from xran layer to PHY + * @param xran_transport_callback_fn pCallback + * Callback function to call with arrival of PRACH packets for given CC + * @param pCallbackTag + * Parameters of Callback function + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_lte_prach_req (void * pHandle, + struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pDstBufferDecomp[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], + xran_transport_callback_fn pCallback, void *pCallbackTag); +/** + * @ingroup xran + * + * Function configures SRS output buffers and callback for XRAN layer with given handle + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param pDstBuffer + * list of memory buffers to use to deliver SRS IQs from xran layer to PHY + * @param xran_transport_callback_fn pCallback + * Callback function to call with arrival of SRS packets for given CC + * @param pCallbackTag + * Parameters of Callback function + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_lte_srs_req (void * pHandle, + struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN], + struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN], + xran_transport_callback_fn pCallback, + void *pCallbackTag); /** * @ingroup xran @@ -1045,6 +1718,45 @@ int32_t xran_5g_srs_req (void * pHandle, * 0 - on success */ uint32_t xran_get_time_stats(uint64_t *total_time, uint64_t *used_time, uint32_t *num_core_used, uint32_t *core_used, uint32_t clear); +uint32_t xran_timingsource_get_timestats(uint64_t *total_time, uint64_t *used_time, uint32_t *num_core_used, uint32_t *core_used, uint32_t clear); + +/** + * @ingroup xran + * + * Function separates the start of timing thread from xran per port processing. + * It sets the timer thread state as RUNNING and starts the timer thread with xran_timing_source_thread(). + * The per port initializations and XAN layer start will be handled post this. + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_timingsource_start(void); + +/** + * @ingroup xran + * + * Function starts the worker cores for XRAN after timing thread has been started. + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_start_worker_threads(); + +/** + * @ingroup xran + * + * Function separates the stop of timing thread and XRAN layer. Handled post XRAN layer stop. + * + * @return + * 0 - on success + * -1 - on error + */ +int32_t xran_timingsource_stop(void); + +int32_t xran_timingsource_get_threadstate(void); + /** * @ingroup xran @@ -1053,7 +1765,7 @@ uint32_t xran_get_time_stats(uint64_t *total_time, uint64_t *used_time, uint32_t * * @param pHandle * Pointer to XRAN layer handle for given CC - * @param pointer to struct xran_fh_config pConf + * @param pConf * Pointer to XRAN configuration structure with specific settings to use * * @return @@ -1067,25 +1779,69 @@ int32_t xran_open(void *pHandle, struct xran_fh_config* pConf); * Function starts XRAN layer with given handle * * @param pHandle - * Pointer to XRAN layer handle for given CC + * Pointer to XRAN layer handle for RU * * @return * 0 - on success */ int32_t xran_start(void *pHandle); +/** + * @ingroup xran + * + * Function enable a Carrier Component in the RU. + * Given CC starts transmitting/receiving packets. + * + * @param port_id + * Port(RU) ID + * @param cc_id + * Carrier Component ID in the Port + * + * @return + * 0 - on success + */ +int32_t xran_activate_cc(int32_t port_id, int32_t cc_id); + +/** + * @ingroup xran + * + * Function disable a Carrier Component in the RU. + * Given CC stops transmitting/receiving packets. + * + * @param port_id + * Port(RU) ID + * @param cc_id + * Carrier Component ID in the Port + * + * @return + * 0 - on success + */ +int32_t xran_deactivate_cc(int32_t port_id, int32_t cc_id); + /** * @ingroup xran * * Function stops XRAN layer with given handle * * @param pHandle - * Pointer to XRAN layer handle for given CC + * Pointer to XRAN layer handle for RU * * @return * 0 - on success */ int32_t xran_stop(void *pHandle); +/** + * @ingroup xran + * + * Function shuts down XRAN layer + * + * @param pHandle + * Pointer to XRAN layer handle for RU + * + * @return + * 0 - on success + */ +int32_t xran_shutdown(void *pHandle); /** * @ingroup xran @@ -1093,7 +1849,7 @@ int32_t xran_stop(void *pHandle); * Function closes XRAN layer with given handle * * @param pHandle - * Pointer to XRAN layer handle for given CC + * Pointer to XRAN layer handle for RU * * @return * 0 - on success @@ -1103,7 +1859,36 @@ int32_t xran_close(void *pHandle); /** * @ingroup xran * - * Function registers callback to XRAN layer. Function support callbacks aligned on packet arrival. + * Function checks RU is active state + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * + * @return + * 0 - on success + */ +int32_t xran_get_ru_isactive(void *pHandle); + +/** + * @ingroup xran + * + * Function checks CC in specified RU is active + * + * @param pHandle + * Pointer to XRAN layer handle for given CC + * @param cc_id + * Carrier Component ID in the RU + * + * @return + * 0 - on success + */ +int32_t xran_get_cc_isactive(void *pHandle, uint32_t cc_id); + +/** + * @ingroup xran + * + * Function registers callback to XRAN layer. Function support callbacks aligned on packet arrival for all the + * numerologies configured on the xran port. * * @param pHandle * Pointer to XRAN layer handle for given CC @@ -1115,12 +1900,15 @@ int32_t xran_close(void *pHandle); * symbol to be register for * @param cb_per_sym_type_id * call back time identification (see enum cb_per_sym_type_id) + * @param mu + * Numerology for which to call this callback * * @return * 0 - in case of success * -1 - in case of failure */ -int32_t xran_reg_sym_cb(void *pHandle, xran_callback_sym_fn symCb, void * symCbParam, struct xran_sense_of_time* symCbTime, uint8_t symb, enum cb_per_sym_type_id cb_sym_t_id); +int32_t xran_reg_sym_cb(void *pHandle, xran_callback_sym_fn symCb, void * symCbParam, struct xran_sense_of_time* symCbTime, + uint8_t symb, enum cb_per_sym_type_id cb_sym_t_id, uint8_t mu); /** @@ -1144,32 +1932,21 @@ int32_t xran_reg_sym_cb(void *pHandle, xran_callback_sym_fn symCb, void * symCbP * 0 - in case of success * -1 - in case of failure */ -int32_t xran_reg_physide_cb(void *pHandle, xran_fh_tti_callback_fn Cb, void *cbParam, int skipTtiNum, enum callback_to_phy_id); +int32_t xran_timingsource_reg_tticb(__attribute__((unused)) void *pHandle, xran_fh_tti_callback_fn Cb, void *cbParam, int skipTtiNum, enum callback_to_phy_id id); /** * @ingroup xran * - * Function registers callback to XRAN layer. Function support callbacks align to OTA time. TTI even, half of slot, - * full slot with respect to PTP time. - * + * Function registers callback to XRAN layer * @param pHandle * Pointer to XRAN layer handle for given CC * @param Cb - * pointer to callback function - * @param cbParam - * pointer to Callback Function parameters - * @param skipTtiNum - * number of calls to be skipped before first call - * @param callback_to_phy_id - * call back time identification (see enum callback_to_phy_id) - * @param xran_port_id - * XRAN device ID - * * @return * 0 - in case of success * -1 - in case of failure */ -int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, void *cbParam, int skipTtiNum, enum callback_to_phy_id, uint8_t xran_port_id); +int32_t xran_reg_physide_oam_cb(void *pHandle, xran_callback_oam_notify_fn Cb); + /** * @ingroup xran @@ -1191,7 +1968,8 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, * @return * current TTI number [0-7999] */ -int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond); +int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond, uint8_t mu); +int32_t xran_timingsource_get_slotidx (uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond, uint8_t mu); /** * @ingroup xran @@ -1210,7 +1988,7 @@ int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubf * @return * whether it is a prach slot or not */ -int32_t xran_is_prach_slot(uint8_t PortId, uint32_t subframe_id, uint32_t slot_id); +int32_t xran_is_prach_slot(uint8_t PortId, uint32_t subframe_id, uint32_t slot_id, uint8_t mu); /** * @ingroup xran @@ -1228,6 +2006,10 @@ int32_t xran_is_prach_slot(uint8_t PortId, uint32_t subframe_id, uint32_t slot_i */ int32_t xran_get_common_counters(void *pXranLayerHandle, struct xran_common_counters *pStats); +/** + * @brief Common function to print the XRAN Error Counters + */ +void xran_print_error_stats(struct xran_common_counters* x_counters); /** * @ingroup xran @@ -1242,32 +2024,6 @@ int32_t xran_get_common_counters(void *pXranLayerHandle, struct xran_common_coun enum xran_if_state xran_get_if_state(void); -/** - * @ingroup xran - * - * Function allocates memory of given size from heap - * - * @param buf_len - * buffer size - * - * @return - * buf_len - size of memory allocation - */ -void* xran_malloc(size_t buf_len); - -/** - * @ingroup xran - * - * Function frees memory of given size from heap - * - * @param buf_len - * addr - pointer to buffer - * - * @return - * void - */ -void xran_free(void *addr); - /** * @ingroup xran * @@ -1367,7 +2123,7 @@ int32_t xran_init_PrbMap_by_symbol_from_cfg(struct xran_prb_map* p_PrbMapIn, str * 0 - on success */ int32_t xran_prepare_up_dl_sym(uint16_t xran_port_id, uint32_t nSlotIdx, uint32_t nCcStart, uint32_t nCcNum, uint32_t nSymMask, uint32_t nAntStart, - uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum); + uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum, uint8_t mu); /** * @ingroup xran * @@ -1379,7 +2135,7 @@ int32_t xran_prepare_up_dl_sym(uint16_t xran_port_id, uint32_t nSlotIdx, uint32 * 0 - on success */ int32_t xran_prepare_cp_dl_slot(uint16_t xran_port_id, uint32_t nSlotIdx, uint32_t nCcStart, uint32_t nCcNum, uint32_t nSymMask, uint32_t nAntStart, - uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum); + uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum, uint8_t mu); /** * @ingroup xran @@ -1391,8 +2147,100 @@ int32_t xran_prepare_cp_dl_slot(uint16_t xran_port_id, uint32_t nSlotIdx, uint3 * @return * 0 - on success */ + int32_t xran_prepare_cp_ul_slot(uint16_t xran_port_id, uint32_t nSlotIdx, uint32_t nCcStart, uint32_t nCcNum, uint32_t nSymMask, uint32_t nAntStart, - uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum); + uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum, uint8_t mu); + + +int32_t xran_get_numerology_status_buffer_pointer(uint16_t xran_port_id, xran_active_numerologies_per_tti **activeMuPerTti); + +/** + * @ingroup xran + * + * Function prepares UL U-plane, PRACH, SRS packets for symbol for O-RAN FH. Enques resulting packet to ring for TX at appropriate time + * + * @param pHandle + * pointer to O-RU port structure + * @return + * 0 - on success + */ + +int32_t xran_prepare_up_ul_tx_sym(uint16_t xran_port_id, uint32_t nSfIdx, uint32_t nCcStart, uint32_t nCcNum, uint32_t nSymMask, uint32_t nAntStart, + uint32_t nAntNum, uint32_t nSymStart, uint32_t nSymNum, uint8_t mu); +void xran_l1budget_calc(uint8_t numerology, uint16_t t1a_max_up, uint16_t ta4_max,uint16_t *ul_budget,uint16_t *dl_budget, uint16_t *num_sym); + + +/** Function returns xran port id (RU) through local VF MAC address */ +uint32_t xran_get_RUport_by_MACaddr(uint8_t nSrcMacAddress[6]); + +int32_t xran_fetch_and_print_lbm_stats(bool print_xran_lbm_stats, uint8_t *link_status , uint8_t vfId); + +void xran_config_dpdk_process_id_tag(int32_t Tag); + +int xran_get_memstat(struct xran_memstat *stat); + +#ifdef POLL_EBBU_OFFLOAD +/* All functions/variables defined below are to support the polling event processing feature of eBBUPOOL framework*/ + +/** Function removes all the timing related callback functions */ +int32_t xran_timing_destroy_cbs(void *args); + +/** Timer context structure when macro POLL_EBBU_OFFLOAD is enabled */ +typedef struct _XRAN_TIMER_CTX_ +{ + struct timespec ebbu_offload_last_time; + // volatile struct timespec ebbu_offload_last_time; + struct timespec ebbu_offload_cur_time; + // volatile struct timespec ebbu_offload_cur_time; + long current_second; + // volatile unsigned long current_second; + uint32_t ebbu_offload_ota_tti_cnt_mu[XRAN_PORTS_NUM][XRAN_MAX_NUM_MU]; + uint32_t ebbu_offload_ota_sym_cnt_mu[XRAN_MAX_NUM_MU]; + uint32_t ebbu_offload_ota_sym_idx_mu[XRAN_MAX_NUM_MU]; + int32_t first_call; + int32_t sym_up_window; + uint64_t used_tick; + uint16_t xran_SFN_at_Sec_Start; /**< SFN at current second start */ + int32_t (*pFn)(uint32_t, uint32_t, uint32_t, void*); +} XRAN_TIMER_CTX, *PXRAN_TIMER_CTX; + + /** Function returns the context of XRAN timer structure when macro POLL_EBBU_OFFLOAD is enabled */ +PXRAN_TIMER_CTX xran_timer_get_ctx_ebbu_offload(void); + + /** Function returns TTI interval when macro POLL_EBBU_OFFLOAD is enabled */ +long xran_timer_get_interval_ebbu_offload(void); + + /** Function returns TTI interval when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_sym_poll_task_ebbu_offload(void); + + /** Function to do time adjustment according to section 9.7.2 of ORAN spec when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t timing_adjust_gps_second_ebbu_offload(struct timespec* p_time); + + /** Function makes callbacks according to symbol timing when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_sym_poll_callback_task_ebbu_offload(void); + + /** Function offloads FH packet polling and processsing when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_pkt_proc_poll_task_ebbu_offload(void); + + /** Function offloads the DL CP processsing when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_task_dl_cp_ebbu_offload(void *arg); + + /** Function offloads the UL CP processsing when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_task_ul_cp_ebbu_offload(void *arg); + + /** Function offloads TTI processsing when macro POLL_EBBU_OFFLOAD is enabled */ +int32_t xran_task_tti_ebbu_offload(void *arg); + + /** Function updates SFN when macro POLL_EBBU_OFFLOAD is enabled */ +void xran_updateSfnSecStart(void); + + /** Function returns FH counter structure when macro POLL_EBBU_OFFLOAD is enabled */ +struct xran_common_counters* xran_fh_counters_ebbu_offload(void); + + /** Function returns device context structure when macro POLL_EBBU_OFFLOAD is enabled */ +struct xran_device_ctx *xran_dev_get_ctx_ebbu_offload(void); + +#endif #ifdef __cplusplus } diff --git a/fhi_lib/lib/api/xran_fh_o_ru.h b/fhi_lib/lib/api/xran_fh_o_ru.h index 7812399..959479f 100644 --- a/fhi_lib/lib/api/xran_fh_o_ru.h +++ b/fhi_lib/lib/api/xran_fh_o_ru.h @@ -64,7 +64,8 @@ extern "C" { * Callback function to call with arrival of C-Plane packets for given CC * @param pCallbackTag * Parameters of Callback function - * + * @param mu + * Numerology that this config applies to. * @return * 0 - on success * -1 - on error @@ -73,9 +74,9 @@ extern "C" { int32_t xran_5g_bfw_config(void * pHandle, struct xran_buffer_list *pSrcRxCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pSrcTxCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, - void *pCallbackTag); + void *pCallbackTag, uint8_t mu); #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/fhi_lib/lib/api/xran_lib_mlog_tasks_id.h b/fhi_lib/lib/api/xran_lib_mlog_tasks_id.h index c013e02..c12bb26 100644 --- a/fhi_lib/lib/api/xran_lib_mlog_tasks_id.h +++ b/fhi_lib/lib/api/xran_lib_mlog_tasks_id.h @@ -30,25 +30,25 @@ extern "C" { #endif -#define RESOURCE_CORE_0 0 -#define RESOURCE_CORE_1 1 -#define RESOURCE_CORE_2 2 -#define RESOURCE_CORE_3 3 -#define RESOURCE_CORE_4 4 -#define RESOURCE_CORE_5 5 -#define RESOURCE_CORE_6 6 -#define RESOURCE_CORE_7 7 -#define RESOURCE_CORE_8 8 -#define RESOURCE_CORE_9 9 -#define RESOURCE_CORE_10 10 -#define RESOURCE_CORE_11 11 -#define RESOURCE_CORE_12 12 -#define RESOURCE_CORE_13 13 -#define RESOURCE_CORE_14 14 -#define RESOURCE_CORE_15 15 -#define RESOURCE_CORE_16 16 - -#define RESOURCE_IA_CORE 100 +#define RESOURCE_CORE_0 0 +#define RESOURCE_CORE_1 1 +#define RESOURCE_CORE_2 2 +#define RESOURCE_CORE_3 3 +#define RESOURCE_CORE_4 4 +#define RESOURCE_CORE_5 5 +#define RESOURCE_CORE_6 6 +#define RESOURCE_CORE_7 7 +#define RESOURCE_CORE_8 8 +#define RESOURCE_CORE_9 9 +#define RESOURCE_CORE_10 10 +#define RESOURCE_CORE_11 11 +#define RESOURCE_CORE_12 12 +#define RESOURCE_CORE_13 13 +#define RESOURCE_CORE_14 14 +#define RESOURCE_CORE_15 15 +#define RESOURCE_CORE_16 16 + +#define RESOURCE_IA_CORE 100 //-------------------------------------------------------------------- // XRAN @@ -63,6 +63,10 @@ extern "C" { #define PID_XRAN_BBDEV_DL_POLL_DISPATCH 52 #define PID_XRAN_BBDEV_UL_POLL 53 #define PID_XRAN_BBDEV_UL_POLL_DISPATCH 54 +#define PID_XRAN_BBDEV_SRS_FFT_POLL 55 +#define PID_XRAN_BBDEV_SRS_FFT_POLL_DISPATCH 56 +#define PID_XRAN_BBDEV_PRACH_IFFT_POLL 57 +#define PID_XRAN_BBDEV_PRACH_IFFT_POLL_DISPATCH 58 #define PID_TTI_TIMER 3100 #define PID_TTI_CB 3101 @@ -106,11 +110,11 @@ extern "C" { #define PID_UP_UL_HALF_DEAD_LINE_CB 3135 #define PID_UP_UL_FULL_DEAD_LINE_CB 3136 #define PID_UP_UL_USER_DEAD_LINE_CB 3137 -#define PID_PROCESS_UP_PKT 3140 -#define PID_PROCESS_UP_PKT_SRS 3141 -#define PID_PROCESS_UP_PKT_PARSE 3142 -#define PID_PROCESS_CP_PKT 3143 -#define PID_PROCESS_DELAY_MEAS_PKT 3144 +#define PID_PROC_UP_PKT_PUSCH 3140 +#define PID_PROC_UP_PKT_SRS 3141 +#define PID_PROC_UP_PKT_PARSE 3142 +#define PID_PROC_CP_PKT 3143 +#define PID_PROC_DELAY_MEAS_PKT 3144 #define PID_UP_UL_ONE_FOURTHS_DEAD_LINE_CB 3145 #define PID_UP_UL_THREE_FOURTHS_DEAD_LINE_CB 3146 #define PID_UP_STATIC_SRS_DEAD_LINE_CB 3147 @@ -119,6 +123,16 @@ extern "C" { #define PID_TIME_ARM_USER_TIMER_DEADLINE 3151 #define PID_REQUEUE_TX_SYM 3160 +#define PID_PROCESS_UP_PKT_CSIRS 3161 +#define PID_PROCESS_TX_SYM_SRS_NDM 3162 + +#define PID_PREPARE_TX_SYM 3170 + +#define PID_PROC_UP_BATCH_PKT_PUSCH 3180 +#define PID_PROC_UP_BATCH_PKT_SRS 3181 +#define PID_PROC_UP_BATCH_PKT_PARSE 3182 +#define PID_PROC_UP_BATCH_PKT_PRACH 3183 + #ifdef __cplusplus } diff --git a/fhi_lib/lib/api/xran_mlog_lnx.h b/fhi_lib/lib/api/xran_mlog_lnx.h index e42a8a6..de3d80b 100644 --- a/fhi_lib/lib/api/xran_mlog_lnx.h +++ b/fhi_lib/lib/api/xran_mlog_lnx.h @@ -53,6 +53,14 @@ extern "C" #define MLogGetAvgStats(a, b, c, d) MLOG_FALSE #define MLogAddTestCase(a, b) MLOG_FALSE #define MLogAddPowerStats(a, b, c, d, e) MLOG_FALSE +#define MLogSetTaskCoreMap(a) 0 + +enum MLogXranTasks { + TASK_3104, + TASK_3416, + TASK_3500, + TASK_3501, +}; #endif /* MLOG_ENABLED */ diff --git a/fhi_lib/lib/api/xran_pkt.h b/fhi_lib/lib/api/xran_pkt.h index 314b8d6..f430c12 100644 --- a/fhi_lib/lib/api/xran_pkt.h +++ b/fhi_lib/lib/api/xran_pkt.h @@ -67,7 +67,7 @@ extern "C" { #define XRAN_MTU_DEFAULT RTE_ETHER_MTU #define XRAN_APP_LAYER_MAX_SIZE_L2_DEFAUT (XRAN_MTU_DEFAULT - 8) /**< In case of L2 only solution, application layer maximum transmission unit size is standard IEEE 802.3 Ethernet frame payload - size (1500 bytes) ? transport overhead (8 bytes) = 1492 bytes (or larger for Jumbo frames) */ + size (1500 bytes) � transport overhead (8 bytes) = 1492 bytes (or larger for Jumbo frames) */ #ifndef OK #define OK 0 /* Function executed correctly */ @@ -145,12 +145,12 @@ enum ecpri_action_type union ecpri_seq_id { struct -{ - uint8_t seq_id:8; /**< Sequence ID */ - uint8_t sub_seq_id:7; /**< Subsequence ID */ - uint8_t e_bit:1; /**< E bit */ + { + uint8_t seq_id:8; /**< Sequence ID */ + uint8_t sub_seq_id:7; /**< Subsequence ID */ + uint8_t e_bit:1; /**< E bit */ } bits; - struct + struct { uint16_t data_num_1; } data; @@ -171,12 +171,12 @@ union ecpri_seq_id union xran_ecpri_cmn_hdr { struct -{ - uint8_t ecpri_concat:1; /**< 3.1.3.1.3 eCPRI concatenation indicator */ - uint8_t ecpri_resv:3; /**< 3.1.3.1.2 eCPRI reserved */ - uint8_t ecpri_ver:4; /**< 3.1.3.1.1 eCPRI protocol revision, defined in XRAN_ECPRI_VER */ - uint8_t ecpri_mesg_type; /**< 3.1.3.1.4 eCPRI message type, defined in ecpri_msg_type */ - uint16_t ecpri_payl_size; /**< 3.1.3.1.5 eCPRI payload size, without common header and any padding bytes */ + { + uint8_t ecpri_concat:1; /**< 3.1.3.1.3 eCPRI concatenation indicator */ + uint8_t ecpri_resv:3; /**< 3.1.3.1.2 eCPRI reserved */ + uint8_t ecpri_ver:4; /**< 3.1.3.1.1 eCPRI protocol revision, defined in XRAN_ECPRI_VER */ + uint8_t ecpri_mesg_type; /**< 3.1.3.1.4 eCPRI message type, defined in ecpri_msg_type */ + uint16_t ecpri_payl_size; /**< 3.1.3.1.5 eCPRI payload size, without common header and any padding bytes */ } bits; struct { @@ -200,7 +200,6 @@ struct xran_ecpri_delay_meas_pl uint8_t ActionType; /**< Table 2-17 Octet 6 */ TimeStamp ts; /**< Table 2-17 Octet 7-16 */ int64_t CompensationValue; /**< Table 2-17 Octet 17 */ - uint8_t DummyBytes[1400]; /**< Table 2-17 Octet 25 */ } /*__rte_packed*/; /** @@ -241,12 +240,12 @@ struct xran_ecpri_hdr * Enum used to set xRAN packet data direction (gNB Tx/Rx 5.4.4.1) * uplink or downlink *****************************************************************************/ -enum xran_pkt_dir +typedef enum xran_pkt_dir { XRAN_DIR_UL = 0, /**< UL direction */ XRAN_DIR_DL = 1, /**< DL direction */ XRAN_DIR_MAX -}; +}xran_pkt_dir; /** ****************************************************************************** @@ -259,19 +258,19 @@ enum xran_pkt_dir *****************************************************************************/ struct radio_app_common_hdr { - /* Octet 9 */ + /* Octet 9 */ union { uint8_t value; struct { - uint8_t filter_id:4; /**< This parameter defines an index to the channel filter to be + uint8_t filter_id:4; /**< This parameter defines an index to the channel filter to be used between IQ data and air interface, both in DL and UL. For most physical channels filterIndex =0000b is used which indexes the standard channel filter, e.g. 100MHz channel filter for 100MHz nominal carrier bandwidth. (see 5.4.4.3 for more) */ - uint8_t payl_ver:3; /**< This parameter defines the payload protocol version valid + uint8_t payl_ver:3; /**< This parameter defines the payload protocol version valid for the following IEs in the application layer. In this version of the specification payloadVersion=001b shall be used. */ - uint8_t data_direction:1; /**< This parameter indicates the gNB data direction. */ + uint8_t data_direction:1; /**< This parameter indicates the gNB data direction. */ }; }data_feature; @@ -339,6 +338,91 @@ struct xran_pkt_comm_hdr struct xran_ecpri_hdr ecpri_hdr; /**< eCPRI Transport Header */ } __rte_packed; +/** +****************************************************************************** +* @struct xran_cfm_opcode_e +* +* @brief +* IEEE 802.1Q - Table 21-3 OpCode Field range assignments +****************************************************************************** +*/ +typedef enum xran_cfm_opcode_e { + CFM_OPCODE_LOOPBACK_REPLY = 2, + CFM_OPCODE_LOOPBACK_MESSAGE = 3 +} xran_cfm_opcode; + +#define END_TLV 0 +#define SENDER_ID_TLV 1 +#define CHASSIS_ID_SUBTYPE_MAC_ADDR 4 +/** +****************************************************************************** +* @struct xran_cfm_common_header +* +* @brief +* IEEE 802.1Q - 21.4 Common CFM Header +****************************************************************************** +*/ +typedef struct __rte_packed xran_cfm_common_header_s +{ + uint8_t version:5; /* 21.4.2 - The protocol version number*/ + uint8_t md_level:3; /* 21.4.1 - Integer identifying the Maintenance Domain Level (MD Level) of the packet */ + uint8_t opcode; /* 21.4.3 - OpCode field specifies the format and meaning of the remainder of the CFM PDU */ + uint8_t flags; /* 21.4.4 - The use of the Flags field is defined separately for each OpCode */ + uint8_t first_tlv_offset; /* 21.4.5 - The offset, starting from the first octet following the First TLV Offset field, up to the first TLV in the CFM PDU*/ +} xran_cfm_common_header; + +/** +****************************************************************************** +* @struct xran_sender_id_tlv +* +* @brief +* IEEE 802.1Q - Table 21.7 Sender ID TLV Formats +* Only mandatory fields i.e. upto chassis ID are supported +****************************************************************************** +*/ +typedef struct __rte_packed xran_sender_id_tlv_s +{ + uint8_t type; /* 21.5.1.1 Type field in the TLV format */ + uint16_t length; /* 21.5.1.2 The 16 bits of the Length field indicate the size, in octets, of the Value field */ + uint8_t chassis_id_length; /* 21.5.3.1 The length, in octets, of the Chassis ID field*/ + uint8_t chassis_id_subtype;/* 21.5.3.2 Identifies the format of the Chassis ID field. Specified by 9.5.2.2 of IEEE Std 802.1AB-2005*/ + + /* ============== Note =========== + Next field chassis id depends on chassis ID subtype : IEEE 802.1 AB - Table 8.2 + However in xRAN LBM message only CHASSIS_ID_SUBTYPE_MAC_ADDR is supported + =============================== */ + uint8_t chassis_id_smac[6]; /* MAC address of the transmitter */ + uint8_t end_type; /* End type value to indicate the end of TLV */ +} xran_sender_id_tlv; + +/** +****************************************************************************** +* @struct xran_lbm_header +* +* @brief +* IEEE 802.1Q - Table 21-20—LBM and LBR formats +****************************************************************************** +*/ +typedef struct __rte_packed xran_lbm_header_s { + xran_cfm_common_header cfm_common_header; /* See the definition of xran_cfm_common_header for sub-field field information */ + uint32_t loopBackTransactionIdentifier; /* 21.7.3 A MEP copies the contents of the nextLBMtransID variable to this field. */ + xran_sender_id_tlv tlv; /* See the definition of xran_sender_id_tlv for sub-field field information */ +} xran_lbm_header; + +/** +****************************************************************************** +* @struct xran_cfm_common_header +* +* @brief +* IEEE 802.1Q - Table 21-20—LBM and LBR formats +****************************************************************************** +*/ +typedef struct __rte_packed xran_lbr_header_s { + xran_cfm_common_header cfm_common_header; /* See the definition of xran_cfm_common_header for sub-field field information */ + uint32_t loopBackTransactionIdentifier; /* 21.7.3 A MEP copies the contents of the nextLBMtransID variable to this field. */ + uint8_t end_tlv; +} xran_lbr_header; + #ifdef __cplusplus } #endif diff --git a/fhi_lib/lib/api/xran_pkt_cp.h b/fhi_lib/lib/api/xran_pkt_cp.h index 33e96b3..0c690a1 100644 --- a/fhi_lib/lib/api/xran_pkt_cp.h +++ b/fhi_lib/lib/api/xran_pkt_cp.h @@ -62,13 +62,13 @@ struct xran_cp_radioapp_common_header { /* 6bytes, first 4bytes need the con union { uint32_t all_bits; struct { - uint32_t startSymbolId:6; /**< 5.4.4.7 start symbol identifier */ - uint32_t slotId:6; /**< 5.4.4.6 slot identifier */ - uint32_t subframeId:4; /**< 5.4.4.5 subframe identifier */ - uint32_t frameId:8; /**< 5.4.4.4 frame identifier */ - uint32_t filterIndex:4; /**< 5.4.4.3 filter index, XRAN_FILTERINDEX_xxxx */ - uint32_t payloadVer:3; /**< 5.4.4.2 payload version, should be 1 */ - uint32_t dataDirection:1; /**< 5.4.4.1 data direction (gNB Tx/Rx) */ + uint32_t startSymbolId:6; /**< 5.4.4.7 start symbol identifier */ + uint32_t slotId:6; /**< 5.4.4.6 slot identifier */ + uint32_t subframeId:4; /**< 5.4.4.5 subframe identifier */ + uint32_t frameId:8; /**< 5.4.4.4 frame identifier */ + uint32_t filterIndex:4; /**< 5.4.4.3 filter index, XRAN_FILTERINDEX_xxxx */ + uint32_t payloadVer:3; /**< 5.4.4.2 payload version, should be 1 */ + uint32_t dataDirection:1; /**< 5.4.4.1 data direction (gNB Tx/Rx) */ }; } field; uint8_t numOfSections; /**< 5.4.4.8 number of sections */ @@ -133,11 +133,11 @@ struct xran_cp_radioapp_section_header { /* 8bytes, need the conversion for b union { uint32_t second_4byte; struct { - uint32_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section 0000 0000b = all PRBs */ - uint32_t startPrbc:10; /**< 5.4.5.4 starting PRB of control section */ - uint32_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */ - uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */ - uint32_t sectionId:12; /**< 5.4.5.1 section identifier */ + uint32_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section 0000 0000b = all PRBs */ + uint32_t startPrbc:10; /**< 5.4.5.4 starting PRB of control section */ + uint32_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */ + uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */ + uint32_t sectionId:12; /**< 5.4.5.1 section identifier */ } common; } u1; } __attribute__((__packed__)); @@ -236,23 +236,23 @@ struct xran_cp_radioapp_section_ext2 { union xran_cp_radioapp_section_ext3_first { /* 16 bytes, need to convert byte order for two parts - 8/8 bytes */ struct{ - uint64_t reserved1:8; - uint64_t crsSymNum:4; /**< 5.4.7.3.6 CRS symbol number indication */ - uint64_t reserved0:3; - uint64_t crsShift:1; /**< 5.4.7.3.7 CRS shift used for DL transmission */ - uint64_t crsReMask:12; /**< 5.4.7.3.5 CRS resource element mask */ - uint64_t txScheme:4; /**< 5.4.7.3.3 transmission scheme */ - uint64_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */ - uint64_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */ - uint64_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */ - uint64_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */ - uint64_t extType:7; /**< 5.4.6.1 extension type */ - uint64_t ef:1; /**< 5.4.6.2 extension flag */ - - uint64_t beamIdAP1:16; /**< 5.4.7.3.8 beam id to be used for antenna port 1 */ - uint64_t beamIdAP2:16; /**< 5.4.7.3.9 beam id to be used for antenna port 2 */ - uint64_t beamIdAP3:16; /**< 5.4.7.3.10 beam id to be used for antenna port 3 */ - uint64_t reserved2:16; + uint64_t reserved1:8; + uint64_t crsSymNum:4; /**< 5.4.7.3.6 CRS symbol number indication */ + uint64_t reserved0:3; + uint64_t crsShift:1; /**< 5.4.7.3.7 CRS shift used for DL transmission */ + uint64_t crsReMask:12; /**< 5.4.7.3.5 CRS resource element mask */ + uint64_t txScheme:4; /**< 5.4.7.3.3 transmission scheme */ + uint64_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */ + uint64_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */ + uint64_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */ + uint64_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */ + uint64_t extType:7; /**< 5.4.6.1 extension type */ + uint64_t ef:1; /**< 5.4.6.2 extension flag */ + + uint64_t beamIdAP1:16; /**< 5.4.7.3.8 beam id to be used for antenna port 1 */ + uint64_t beamIdAP2:16; /**< 5.4.7.3.9 beam id to be used for antenna port 2 */ + uint64_t beamIdAP3:16; /**< 5.4.7.3.10 beam id to be used for antenna port 3 */ + uint64_t reserved2:16; }all_bits; struct{ @@ -287,16 +287,16 @@ union xran_cp_radioapp_section_ext3_first { union xran_cp_radioapp_section_ext3_non_first { uint32_t data_field; struct { - /* 4 bytes, need to convert byte order at once */ - uint32_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */ - uint32_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */ - uint32_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */ + /* 4 bytes, need to convert byte order at once */ + uint32_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */ + uint32_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */ + uint32_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */ - uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */ - uint32_t extType:7; /**< 5.4.6.1 extension type */ - uint32_t ef:1; /**< 5.4.6.2 extension flag */ + uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */ + uint32_t extType:7; /**< 5.4.6.1 extension type */ + uint32_t ef:1; /**< 5.4.6.2 extension flag */ }all_bits; - } __attribute__((__packed__)); +} __attribute__((__packed__)); /** * @ingroup xran_cp_pkt @@ -458,7 +458,7 @@ union xran_cp_radioapp_section_ext11 { uint8_t bfwCompMeth:4; /**< 5.4.7.11.1 Beamforming weight Compression method (5.4.7.1.1) */ uint8_t bfwIqWidth:4; /**< 5.4.7.11.1 Beamforming weight IQ bit width (5.4.7.1.1) */ } __attribute__((__packed__)) all_bits; - struct{ + struct { uint32_t data_field1; uint16_t data_field2; } __attribute__((__packed__)) data_field; diff --git a/fhi_lib/lib/api/xran_timer.h b/fhi_lib/lib/api/xran_timer.h index e9a0632..2efb9dc 100644 --- a/fhi_lib/lib/api/xran_timer.h +++ b/fhi_lib/lib/api/xran_timer.h @@ -37,6 +37,9 @@ extern "C" { #include #include +#include "xran_fh_o_du.h" +#include "xran_ethdi.h" + /* Difference between Unix seconds to GPS seconds GPS epoch: 1980.1.6 00:00:00 (UTC); Unix time epoch: 1970:1.1 00:00:00 UTC Value is calculated on Sep.6 2019. Need to be change if International @@ -52,19 +55,129 @@ extern "C" { #define MSEC_PER_SEC 1000L +#define MAX_TTI_TO_PHY_TIMER (10) + #define XranIncrementSymIdx(sym_idx, numSymPerMs) (((uint32_t)sym_idx >= (((uint32_t)numSymPerMs * MSEC_PER_SEC) - 1)) ? 0 : (uint32_t)sym_idx+1) #define XranDecrementSymIdx(sym_idx, numSymPerMs) (((uint32_t)sym_idx == 0) ? (((uint32_t)numSymPerMs * MSEC_PER_SEC)) - 1) : (uint32_t)sym_idx-1) -uint64_t xran_tick(void); -unsigned long get_ticks_diff(unsigned long curr_tick, unsigned long last_tick); -long poll_next_tick(long interval_ns, unsigned long *used_tick); -long sleep_next_tick(long interval); +enum xran_tmthread_state +{ + XRAN_TMTHREAD_STAT_EXIT = -1, + XRAN_TMTHREAD_STAT_STOP = 0, + XRAN_TMTHREAD_STAT_RUN = 1, + XRAN_TMTHRED_STAT_MAX +}; + + +struct xran_timing_source_ctx +{ + enum xran_tmthread_state state; + + struct timespec started_time; + struct timespec last_time; + struct timespec cur_time; + struct timespec sleeptime; + + volatile unsigned long current_second; + unsigned long started_second; + + uint64_t curr_tick; + uint64_t last_tick; + + uint64_t total_tick; + uint64_t used_tick; + + uint8_t timerMu; + uint16_t sfnAtSecond; /* SFN at current second start */ + uint16_t maxFrame; /* value of max frame used for System Frame Number Calculation + * expected to be 99 (old compatibility mode) or 1023 as per section 9.7.2 */ + int64_t offset_sec; + int64_t offset_nsec; //offset to GPS time calculated based on alpha and beta + + //uint32_t ota_tti; + xran_fh_tti_callback_fn ttiCb[XRAN_CB_MAX]; + void *TtiCbParam[XRAN_CB_MAX]; + uint32_t SkipTti[XRAN_CB_MAX]; + struct rte_timer tti_to_phy_timer[MAX_TTI_TO_PHY_TIMER][XRAN_MAX_NUM_MU]; + + uint64_t timer_missed_sym; + uint64_t timer_missed_slot; +#ifdef POLL_EBBU_OFFLOAD + uint64_t timer_missed_sym_window; +#endif +}; + + int timing_set_debug_stop(int value, int count); int timing_get_debug_stop(void); -uint64_t timing_get_current_second(void); -uint8_t timing_get_numerology(void); -int timing_set_numerology(uint8_t value); -uint32_t xran_max_ota_sym_idx(uint8_t numerlogy); + +inline unsigned long get_ticks_diff(unsigned long curr_tick, unsigned long last_tick) +{ + if (curr_tick >= last_tick) + return (unsigned long)(curr_tick - last_tick); + else + return (unsigned long)(0xFFFFFFFFFFFFFFFF - last_tick + curr_tick); +} + +inline uint64_t xran_tick(void) +{ + uint32_t hi, lo; + __asm volatile ("rdtsc" : "=a"(lo), "=d"(hi)); + return ( (uint64_t)lo)|( ((uint64_t)hi)<<32 ); +} + +int xran_timingsource_set_gpsoffset(int64_t offset_sec, int64_t offset_nsec); +//uint32_t xran_timingsource_get_coreid(void); +long xran_timingsource_poll_next_tick(long interval_ns, unsigned long *used_tick); +long xran_timingsource_sleep_next_tick(long interval); +//long poll_next_tick(long interval_ns, unsigned long *used_tick); +//long sleep_next_tick(long interval); + +inline uint32_t xran_timingsource_get_max_ota_sym_idx(uint8_t numerlogy) +{ + extern const uint8_t slots_per_subframe[5]; + return (XRAN_NUM_OF_SYMBOL_PER_SLOT * slots_per_subframe[numerlogy] * MSEC_PER_SEC); +} + +inline struct xran_timing_source_ctx *xran_timingsource_get_ctx(void) +{ + extern struct xran_timing_source_ctx xran_timerCtx; + return (&xran_timerCtx); +} + +inline uint64_t xran_timingsource_get_current_second(void) +{ + return xran_timingsource_get_ctx()->current_second; +} + +/* Get the numerology used by timer (this will be the highest numerology in use) */ +inline uint8_t xran_timingsource_get_numerology(void) +{ + return (xran_timingsource_get_ctx()->timerMu); +} + +/* Set the numerology used by timer. This could be called multiple times during xran_open(). + * At the end, the highest numerology will be set */ +int xran_timingsource_set_numerology(uint8_t value); + +inline enum xran_tmthread_state xran_timingsource_get_state(void) +{ + return(xran_timingsource_get_ctx()->state); +} +inline void xran_timingsource_set_state(enum xran_tmthread_state state) +{ + xran_timingsource_get_ctx()->state = state; +} + +inline uint32_t xran_timingsource_get_coreid(void) +{ + return(xran_ethdi_get_ctx()->io_cfg.timing_core); +} + +#ifdef POLL_EBBU_OFFLOAD +int timing_get_debug_stop_count(void); +int timing_get_start_second(void); +#endif #ifdef __cplusplus } diff --git a/fhi_lib/lib/api/xran_transport.h b/fhi_lib/lib/api/xran_transport.h index 0b75fbe..15fff8e 100644 --- a/fhi_lib/lib/api/xran_transport.h +++ b/fhi_lib/lib/api/xran_transport.h @@ -60,17 +60,18 @@ struct xran_recv_packet_info { int xran_get_ecpri_hdr_size(void); void xran_update_ecpri_payload_size(struct rte_mbuf *mbuf, int size); -uint16_t xran_compose_cid(uint8_t CU_Port_ID, uint8_t BandSector_ID, uint8_t CC_ID, uint8_t Ant_ID); -void xran_decompose_cid(uint16_t cid, struct xran_eaxc_info *result); +uint16_t xran_compose_cid(uint8_t oxu_port_id, uint8_t CU_Port_ID, uint8_t BandSector_ID, uint8_t CC_ID, uint8_t Ant_ID); +void xran_decompose_cid(uint8_t oxu_port_id, uint16_t cid, struct xran_eaxc_info *result); int xran_build_ecpri_hdr(struct rte_mbuf *mbuf, uint8_t CC_ID, uint8_t Ant_ID, - uint8_t seq_id, + uint8_t seq_id, uint8_t oxu_port_id, struct xran_ecpri_hdr **ecpri_hdr); -int xran_parse_ecpri_hdr(struct rte_mbuf *mbuf, - struct xran_ecpri_hdr **ecpri_hdr, - struct xran_recv_packet_info *pkt_info); +int xran_parse_ecpri_hdr(uint8_t oxu_port_id, + struct rte_mbuf *mbuf, + struct xran_ecpri_hdr **ecpri_hdr, + struct xran_recv_packet_info *pkt_info); #ifdef __cplusplus } diff --git a/fhi_lib/lib/api/xran_up_api.h b/fhi_lib/lib/api/xran_up_api.h index 46e0e1d..28dfb89 100644 --- a/fhi_lib/lib/api/xran_up_api.h +++ b/fhi_lib/lib/api/xran_up_api.h @@ -89,6 +89,19 @@ int32_t xran_extract_iq_samples(struct rte_mbuf *mbuf, int8_t expect_comp, enum xran_comp_hdr_type staticComp, uint8_t *compMeth, + uint8_t *iqWidth, + uint8_t oxu_port_id); + +int32_t xran_extract_iq_samples_dataheader(struct rte_mbuf *mbuf, + void **iq_data_start, + uint16_t *num_prbu, + uint16_t *start_prbu, + uint16_t *sym_inc, + uint16_t *rb, + uint16_t *sect_id, + int8_t expect_comp, + enum xran_comp_hdr_type staticComp, + uint8_t *compMeth, uint8_t *iqWidth); int xran_prepare_iq_symbol_portion( @@ -104,7 +117,24 @@ int xran_prepare_iq_symbol_portion( uint32_t do_copy, uint16_t num_sections, uint16_t section_id_start, - uint16_t iq_offset); + uint16_t iq_offset, + uint8_t oxu_port_id); + +int32_t xran_prepare_iq_symbol_portion_appand( + struct rte_mbuf *mbuf, + const void *iq_data_start, + const enum xran_input_byte_order iq_buf_byte_order, + const uint32_t iq_data_num_bytes, + struct xran_up_pkt_gen_params *params, + uint8_t CC_ID, + uint8_t Ant_ID, + uint8_t seq_id, + enum xran_comp_hdr_type staticEn, + uint32_t do_copy, + uint16_t num_sections, + uint16_t section_id_start, + uint16_t iq_offset, + uint8_t oxu_port_id); #ifdef __cplusplus } diff --git a/fhi_lib/lib/build-oru/libxran-oru.a b/fhi_lib/lib/build-oru/libxran-oru.a new file mode 100644 index 0000000000000000000000000000000000000000..6d9279db83ed881f6e185c0e3af39cee72c153f6 GIT binary patch literal 4576778 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 DxKj_*Vboti_O9;e* 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
pJ2U(t~(2wSEA(wTc zGt^lwF_|mOCShll+dxc#ZVGAeXru!Mjf4PtlLg#&!7Y#M2yRabEwrVEt5Fc{p2kfGg((3S>|) zxt*|yUtA?iY;$3!n1kKPBYaMt6_eOy24lZcV#hDA3rUNcR~#lGXQrZj6{0eMB|jd` zl}2acDM(^GlY?cMF^hSUrcW@UHeIKe>*3I((cp{JY# z-9Ml}FM1UJ;^_ar331mqbL=qN9L#|7bfH(130MQb`VB7sh-4X^l--Cfzw&)C6c@kD z0;w;vAv&RC0_<=T3XVi;R>;Q5M`7q1dKk=eZx^l}BZjMzRtz_*lsv?gJhZ2ruMr>C z%Ld}WJ+)SKDvMMbDQ8L0Fj|Aje9v(qXiMLUw&oR!vRUXpM^>(4fQ}Qk$6R&Bt)Hyr)c8ie^g~4WNa%IaSJ)k~2M%htruU+$xpb z3;o6kp&w<{j>LM30awZsp<+Ih9e{gDm!FQx>syq@E+?*(as^Bp5M>Y{4B2o-ggKtH3{4?&b=`#a+nRvJ_Q}h69cN_Qqt75*OZi1Z4U| zCtJu(a;Ye*gqBOCXl9Ljy-_g=awQhD<65T39i&K#W%qh!O0W+tm8`j_vYiFFbg5_0 z;i8FwOM|NcCw?C$Zi$7S@p3fRQ=aTC6=t+?zOIP|PERFrJ?Xu;k40hprs-u97%R#_ zTNEd8m>=z|kj_T4J$#Lw%JFLeG7C0R42@QS zJad#EAvc3-373{;uS7}9kK%41(}o`N^*dOSBqwlLQA}JtQ)?J670M}0xD)}%PN<5( z$sTdbN6qkr+sC4>g7Ql4!)<5W-Yf3ehwfAj!HM29dTDg3XgQ#f$u(f|BMY^15?(o_ zoVYG+H_Vx4q-N zAY6v_^L*bf&RM)d2lv3_w@8^iUXFnHNsMfGc<|>C+*lqtMFdtw1Qgb=7*|XaK4L*| zOLrW3N&$j&gP-Y&X$1!pC>f>em^@pf>~R{AFq1sS^2HYrS)D{GBt{KIi-k0s<7$cO zQpJ@h)gA>o1xmwWCMnTCmY{ah%63Q&!xN+cBAraA^t+{JIft?`K`fA%6L5^R1o=VcY;me+7E*JtP*jXDuF(&!w`sI}zC336i=y5vWB1ca3z4xWEd9aQ`3#V&7eW5-JMt49FBO24Ia2!r%$5 zl2F8SLW!nm7*Z25S)S3*y3#f~U36!9O#==d^(}V-IWwRIZ^EQ0oE3&?mZ{8^6=9NA z1ngKrX4Q(MY}hnC1SB+BZnwy`!TS`n^^wZc=+;GBG@_JvCxVx{xBwYADp*zuT1Fo_ z$yH&qCPKX2BZ9NZeAnEhMm7pYizc(EJHNX^ud7f4x#D?i@*u4i1`2d`enEhoDjGrP zc?Sy6WRr{~S=D@D9M*(}77@%GlMa$)Z=3|WR4;nCM8WvR(@9!XDW~xVAA#5-%wi!e zCY%^Dz-wV#!}1_Vk*C&^p2B!2BmLGGX0t_>U!}rp#}ngtwPy;ugLJya?CasXKUOG{W*I&)1`bG<5=Ei$$$2$e z1w;9eI8<8!swzeKa-HC`<)E=Bhs)8&_)-$PI&?b;vsiIUiC^=;Or8ni4TuSRe+P}L zrbsWzN-HhUjLwcB%*`=N6FMGrFmFIx&Bic6p|MQHgp)$J#oPyr4ssucD+e4jUa~VI z#u>0J@Bp$m9%a;dGY11HUY>Hl#RfNw_SfVOmBU<|AA(}^a{QtGfJ$QTfkzd3M8@(3 zDa^0Rm_>ecjPuAC(=!@WE{O*uvskTHfykpor-f$7G?~VH-B79C*kK}PXWJp?u2<&tN_L_Ja|S_thIBR5mxRQB=dP#32hcb3OcJ= zn%;`Cw=66a@K3pXB{4EJ*p@^`6s*#Vh30s1KAGQ!Ek5Z}(uN6MiNiG61X+HJ&JqF{ zb)L|(Y|%x?h#$o?9*=$SFB?XLWHAz)1%swTQ0!9+;mKSjNt98ZnUP++ELoMo<&W`$ zFj{J6Tx`*haIuVkjQS^aayL6j;3@!A=8>?_cj?g$vZ53fnN{ShB2^j0ht!ivC?-bf zW9S9rs5^X0&Y}@O+1;VXJZP$*VS$mi>ad!ON6Rqwi7mtG;@E*D5}Yxco8!X{6Jn}_ zP4Z%1v-kdK0H;lV-Xq}vBd2K!J)nfu3M@9Kcs`-v#0HbKo5YM^$|2Ekh#!R^?QxjE z0+!gxlmZp?0grf%5380q&xxfJ+KHKf%3|UMizgJF>wrgqJirx(tXx7{#AAbao)Hg~ z(Lh?O5T5)=;wiN(?b~20p+M6D`jLB~Hs|z+S%nC5*r1qJ5knkQOl87Vbv0Ay6IWkh zjY^R8&G{rw?%;VM>f%WZ)hZc!Sgn#3EPv(IGGK*@)nrA@^k#)hIIJiRH{psh@WDZ5DVOgvMoo|ZfnuqafKS2HWfOGC=3 z(#RHNyuh{`mwu2=QiN*rK zNG{)DqEx2MPfOZ6$25v$=r{@Q2dkiB#I77#nQ3`|r7}-W1;p47Cm0Sl=JcSDF7U#H ze9=vq2t`7wvmjP><)jDaK*V~f$rBLa_$gHBu%JnE1r>vxC=cCndD&~J$sAXTYCST_ zWBmAW9C+(>vg}s|u^pGfvsl)m4JOWzBRvhum8D{0A}2VI3s@%7MFI{4Q~==3#-nmk z0K+k6G$`*FFaDoWyjO}S}?|BtTXZ1K&quEFDJ7EK^ltZQTe%7DlnerM>mUUuCN1wr3{*b z2(Jq;;yE*cj`HY01ArJGE!5fwog$Q&qFn-_xt*DGGNJMg@+&nMBoa9G8Vd6o_SHFJ z^G^iv%ppE;M3N_TJK&!4feuJV+(~t_F1>iXzgvbcNDw&X1}}|h;D;6t+}L@K6$?gW zF{t=eT6&I)(+?$JDt(NmLbQwQhULXmGIQ8vnVmhZ6%`=q6QJ|f1WQAc zGNBz?p6HQVEgA@oqwyO^&`$C+tnOiBk(u-cE1gP#Ge`#k5S0(5&ckz-!8r=fP2!#4 zQtl|G_G}(`HXt9?#n5fNu{(ojpZO_QtcnZ7;>UU;I(wL(b;St|oarHy{KPNO9fFIN z%42ts&Z1_pp25x`XG86=C4@Cp^5${Y11~IMFvo9dM*Jeq@}Xa(aacU>2nej4a)JzU zIz}@!-Lxs>-BU@jeA=;$=vQ=l6w_-qfiKYT{5t2NUFk(w5snv9gUM7k-q|E=!`z8> z73sqOF^pQ71x;+H(*leY#Hu$RDjC7fJ#|<3^I5$5A%h5I zd0?>L2^U+DFsghoA_Jv{56Alq30m(gp>2TAM8?8_W0$tm>wr*?FG;Iz3r+rM%rr+LcO}f(iV8qmtGXl#%Y{mY(KyJ%^Q1~w{|!0>T8bOx#Sh$ z-#1FkHgXIsK)} zZCHX^W61>Jtt(Fh_wy#e^)by8C^n$LO)Gp>>3iOx4PAJ&c_G$(N1&(qC4s)?djg}) z`C!~j(!I_3KCg6Ukov{r3jK#A+tv@Y&p#{qIZHNP?Q=&!Wl%q_M#JBMIuhQ#kVQq) zZm?*0;dS@(at*ZH&j*0=O$y$dz2u30+}C{lo#9tV(-C}}3<}JOYBsKC=D7X}z8}`E ze>YI7_NciApNzN<*!v77!GAid__XYeux@B=$KJ46+sbg4hWd2%$ zqs@n;#6h1h8ebm)dosm~8*B#jK{S zSNd6n-tTRG>W-ib@yC~WA?~Ac#P6FFy!+OihTlis{C=YbzmI}nYOkLtc;8s1uNCd} zA@BAg{&p{sJmKe~t7O@Rk;@r$6(wqtIsJ?DAes3u%23 zjP!xPe>6AI52+6R4|L)sa_d|2oeR5m!sFh8t%~vjeNm^Ac3`z+K10qFCYPA0czsw$ z>&)d#KmvcH6V3?AcVZsGE=Z^4c;M?yKuX_e>Vzwuo$B1SlROiPG_UQdyl85~o3T!s zBo#HDJQX{psXF-D6WG{7_nfjKg}KFDn{YclvYK- z3s#vFL-H!P!Xlh*#L%?fHRSCa2Bg`pfTLv)nj|6yweg0lXb5nl(8R0(F&L9G!m6B$ zshB_`^ble6cuyoQ$qE?HawI17+)AxU<&O)X^eoQTWBr&IFyfj$p zO^eYed&r_QMvJ6DL!7POSS!O(WL}t|br+z33!#M!ZK>s$X!=V70mE3fCU_Z~icpi9 z^LZ^`T)b?xu_7G2VpVV@<*!roU%Dg^y3km_SQge_8a~DRtqxBcD;mB5FdH7`T z;wpsS@eA-v0Bl?qd4bUte!^(lZEOyA8pcCLAb924;LTh%S8dS5yDA01# zzyR3&z)b0r#`WRtXj_m7e+e1w;2>~3xTZ=|Pc9D_%a;Y$Q#fe}$ z*6L3z*$-YKX!IqJUTA1=<~Ja) z8C@-$rG^aa%O+8YF=Op+11b;I{nD+I(Aht_y=0uDzXCm_N&mvF)H6s?(QiL^0)(6N z&o3D>An_Vi`LL@hA9SkH>s6KOI=pHU)Ze%;iTeC|K&cNg_@)yNO9q?tr!?wT#2R|- z(|Tk#YJ&E88&0Vizmyq)u)gh->~^K6g9BA+{7$Ixx@EyD))*W0 z$;f?B=Ey4Jxs!@EU!gy%!&s+JM@q)Z$n`?0p@h&57{=|S)FJ|^BZi7-UjjWam zZRqEegi5>2!B5$2>nnqs1I8x(mPm(T+Jc- z#@f4n{0W%D6(W{vQdlTy|VwEQ@sh;k}VdB6miB zA#%5|0(jSu{SJOJu+|_p&qWK30q0huCAeiR0=tc8g5vDz40zR z*b_KzocnTs-D6x7jzC=KF;t(+r;YOvJO|V-BC~N4{bvIou|R)aSU(s+?*pTjK*GUItBs3;ZPX7>0j7igvfwUo@;Dh={Xb4bIzmk_HZRtp5i7$GlMy}u*3Jn7AsbwM6L1NGi@z8?4Q?U* z{kO3&L*e_36`b;bC=|NP2#OM856hG$%XEKIlS#%oqDc0XC}Nz?@pp2o~I#? zYxGYBBTrxmhw|KGT(aNTI%%vQGmH*c{HgGdAe}E8S5hCk`eB5p&?Zmg7mm!)aPZPq z`;E0>GbYt2~8e`G?VgFjD=oaX$Lfg|HSUnTPh^bJn2H ze)NEUL;^gKONgnvP>0s=0|;T5q0YTE*tUj2H=|q|`pqh&51`bJ@VK!Fy4{Lix*HYM z&x1BJMPB%auq&@Y&)N~z-*ekN(2pmO8Tl~+u(jcDKLUMQ8F|=Pt*^jPjLwX4YNCTu zFA8?ST7Ha zKgewj>mLHS^^ky3!l*w50gfRWc@FB(p(LdLlj5C{0gK*$PWp_f5?e`j& z0`V&JSyox_77j%nlakL(95NBI93)6ndL(2Di@jmybAhwp^9)@fYxejtHy z+#TLQ1K#^@#qa<{|5zy4AE1PXZv{>uforzzo;Cr|?MUy)%o^cy25;Z8N7kjHfH z)1iQn=CWYtI>8C^HE4&S#p}btZB3{F1P?d%Qiui*3g*nm?NlDLQvx@i@R?N zc9JZb^%v=Aww16as2tj*K%*|21@nNge$FK35?yP=Ow#4d{1aH~S{CU=`_LdP?CI;# z*>559_^`1a-py{*^GZzq?lI2UZ*0Kd-5sa-L5uA)0@nuvRio3ZjDYd%Wx=-dxSa$k z{d{txT1g!GxoAu_^!hqED^N^*aN8>MWc>q}^chfxXNO;a_90{VS0FfMbU;v@cN$yE z#=0Xg;A@fH38NT!FIxF8;r@&ngHWU^U>*@%6TZXfJZh|ayRkWA>_ozaC-Jk@xav-$ zwG8Ns;09jx0P6w7a8+3UoI#!uTK(O(z{Z62rwlau`Fal=)=Tuu9;Tc}Zh0bjMOBsW zj?hG2|Gx`VOIX!aaLx3GmpqM@fdT&50%q0vdzOG0pjAfas#1!=+>%v&$SDA>d-+`2oo4odT}(0)pQdQ&{Czd1AsRooDsfwR4v0FF=q zu-9?1r*7Si7;N#Xr;S~&N4fo&`5iDWD;wv*!b};)>x>PN*BV#+tFhs6;|d6N0|_0! z&k8@!Xwlz*IS1y@lX4D?5schY%%P3vU|C=ZOJ_H1hTa6NgSu@F{~k!+1BPji2|vi# zUPc4bu%y4>lo8M`2tJ2Kpm*N>ba3l&% zx+S=g)uxr&?8}B!o44OGiHXPO4QjF#`afXI`_ERNFCQ1`^LES*Nqs~d#?Uye`n>2C zQlGZ)FO2rPjdO2+M!XLF2^vxI)QImHQX?*aQErF$Pp1!g(udW->qsBsP=^ah9UeU{ z)#1VLWBL}-hFw*%{t09qSr&N<^mMn;2W8t2ZG8i@a6dThG@{VnrC3C`0@LC*9v?$> zJN18piQS8QT6c+z8h!e*lg2pW-Ov`)<$74lYwiReC74~D0_X@By?X93qx=aNW*Txj zjgDaF1!&X#k&a-bilYaXFh|1}5_TK?Sk@qztw6OFH9*TxmW;T*Y`4)(9xCW<1Hwz* z4s<8swDud9ypDsHWB3i=m_!x&CxL$RvdENi$(*sdU_AdWBMq*w^0q|q2D!auf#il6 z{9PDR&ev}uudsxf%_Z>8Z#xAUY|_6Pd;+>n6TVr>(BDk1Hs^d>=Bx>CB?i}GbZ^4c z5>hxP*wIAI@?tiJSmgWGlKVuF&ftzJKJQ*i%cGGCFtx&b>cViaZ57R9zlBbRCgA~8 zzr-3Sj22F~+ep%Hg!~|k_o2&;W>N41m)|3knv6YR{jJZVx$iC@!sxaFYnil^u%cwF z3uhr~)Hxh6(Ko5&0|K(JqG>7 zvMW5eT7U1O+;hTF;3}aj2d`Z%z)3SGanjh_Vd%8R@KuV1Hlc=JF_sUI9y|obF$`W) zGS6&U@Vzu%d?~d36bYvff4F%B@vOZ{_K0ah{$TYh}db8;dWXA ziSLK$TA}}N%fry!bM@DgEd=7#`a9=;M2Lk(e+XMXZAM6cbp9kI=#NHD$v6r{USza9 zg6=+s@^6NF35IHd{Xh2Z14@db-2?ux!!8R*S~8MzmLN$aBS;bf5l}#KMsm(sL~@p# z5kWviBng5b2uKzL2`U0&K)?Wq@>O;HpQZLs)qQVx@ADHY zp>}G9wg&V2i8^zJ_tc*5-~Hb0$mHuD)n6SoRefZxD&phlDQdDw!+TNfJA*BAa`pOv zYIUmhN8O4{u8+!9KRwuJv{QUXx99NAVQLYnt={SQ$Vp#3oc*9<=~dMzvK*d#e+!|Lqb@epDi}t8Mm?pkHj#;OVTq4v#MIN=)3||`*y;dK@q)o3HwmzLQUG29UN4=_2%OOlQ za|F{t@0j)Krgm;mHs)QdI^Q=%rB_?7^Xg=aib@h*IXI$(y091((NmqXh>BjITd;(* zi(er8%fRTykL~#jtGNnaRIA04L21Usmgdop|H@ExT3B}ch0SbS2&qelG#Bk;F4U1# zWc)t5#e?+$NSr+Cc+!!l zc#x-uJ5Q4EyMy)qTP+Oi$KyOjg$LeNZ!A(vSq?DGp^!cc9UM#Q>lsCY-E*>FC$FxR zsI!a7u;YJZ`cm;L!7e)qcKo}Cs`W4YK|J;E4be@U6L>!;S27$}Jj(T-&L5dLgR1gy zcx^m&AvlsgCAR=ZTu=j+;6?s1E3ps8d?= z8mpdeL3MDVx^z+D!+Ex;K;1(Rr_uk{q7UWEt0FuR^|Xpk8lKfywXB$Os*ZI^^?@sS z^qGp1;RTJ=_0lA&vlcHZda0_ul;M;8)ugTBkCqoX)x2Dm7rE7o*mu-r+}L;2wWXBN zsZ>}yHOtWlBho(Bk3FjTv1${UKfPK?*;R9mC>*1@mHN8(6KW3fMn%7`PClwFxap{- zQeUOfeb+0x+-gjn(;JyHxC$2Z)#^rtZ@j8I=atkvH_|h#CLY^)?IfMomBAro#;Dej zrK9Jn_f^kURfzOiC+Af4OMO;VEv6dPr6N^RY7_ER&}pryPL)U1QB4;e)=_GM78Cw# zpsKY0*E+0f-!eO4ut7~4zR@>AZDoS4PHgwe*H<;pJyvxUH~9GDJ=W;Tdbz4~!S1q7 zkxlXc=`O3O!e`YQ5LBVsnMxG~)#L50nqDmTSu0po7`M-As!;FO-JRB;9J*r>6hoaO zl46(%{X3SVUf=HqE9if+6ea)dr9h|El)}+zRp*`_>$KXYFU$YyPV1vjJn9457AMQU z=(MWO#dc7GuC?03+7{&cpLSa9!dVlsI<3KMyE?6BU)84@_4fN(Uvm(lHd?ANy^+xL zTJQDMz1FnhaS2VY^a{vQX1br|V>KT8nC`XyH$J9&t^c);>0WE& zn27o@5mj}sReg9|LUl<}&3QO{SI>FSGu7twBenx8Kox~r`!79DUzq#nl?N- zVMHEX#mQCqon6WQqf-kyuDZ5$OZn)r3blK#LAU*XyXU$jp}uG~QXQXMRom!iBS)(% z4xRKr1wR{EQvWw+IDI>HSXDHtkBZV=(&%ZyNIZ2OJaxER^tOl!j~#4{N)#_LX`(@@ zdmB+ExLmL!ILay=75%ijhEY?!cuGx9?Zee2GZ^`$`lzL9GU`}t zp*lXS7+E^pQ(tYCPpN-wwm(%wKBX=V4Ad7a|DAE|kgvU(2&UT+rHwP)|35D3|5Cl^ z6EcqLy~|XqRhPQbN2b^R8KW9{&=0H@^awfz-2u6jrLHl3mZPSkCxY%k2K8@IO(ULF z|6Zb6tvZeKdOJCdQ>|TOY1KHMRqdyPYW3UHr7h_lTnIV`aj$IU!j-Klv7Ln7In;)B zs_Iv%olNYNE&UJGajtBwYO1enjnwBnmHqg&FB4yrR$9Y#eq#x(TDzSsC>Y>*mTimH;-;c@FL zi-Hq7kE&5$SqiH0id3Vz1|1xv|L;_z=_>HTj4g$^zNHps?*ENa(Dki9vm@bU{$o;0WR+B=%Np%&}DIQ#9b95CRUEg|ikZ)VuD^qHj{hP0E=_?Tblj~b! zBNOO<>QO7OzP|NUcwj`%cyXvsQ09!$`nc6Mp*WZJ&`&XE_>vbkC&wBzR_9OjH7<3U zKwsoq*;Ji0QJGVQ=k`@wSKX}-+V$7yFRTa-ToZ=RCo~8CD}w&QYEMb zGFNbT>$&pu-!GD?fd*LOJ6OE7yd*2Ctd1r@92@{a6ir$A-`4URx>Ax$euDX>IHTDt)D??3-|tfY52*g#>1+aZc`SS+x9O|DtgRf=k zZ*r(F$*F4$@+CPvp|_K&t>-8+os{7%{kN&FPwGn};iX}9Kv*lX=<3L%FGLn8r;dwO z_EZ0G96qnMi5bG@)pyB~MjeO>uL{>}9~n>o3){W^S5(0cMCtE&ss;OzT3^%YTDcdF zs2NYavm>%`a6GH;mEjs@s;|Aq58Zm`dM~VRjNll;`m6RdR8x5(^cUwb#NHQ6y$)M0 z@9XDqD53o_c03$P96N50ghNT}m$BpFklf5DmV%LRC`DXQuL`IlMug-hG1h&e)O%se z<%2WTtVV>?O-3-p-nT@(4u?_;$9WEi(#Cl$FT$bpG8*SO9Lf;qwY&(2o|Mrz&*4y} zIIrbJIFv<3<2;8$+2XvG7vWG28IAKC4&{pTT3&=hd1N&9S$!Kx-DRRi>}z$$iP#|= z(syEed|iygN|!l4TG%h>U7s8Z~>JrcIsVO)RSei=I+ww6mQs*!N0ru{N@ zJRH(@r+Rz{hw46#O2VOf9)I~UFRUa+eL@CldGD+325xO8Zw1fQ)MJX!bC0aG*|xM+ z@iEr+=V?UTito;IS$!<;3xZ(2go^oah%JXPDCgnNcDNjRHo)~NU zHWnpn>xutKwP#m(ZmROfSldI%QzY<5+e5ie-|OnO1}Q?-W9L6Mr)Pd&4e~tNe#-s( zI;rx_%YV@Q0|lWv5JYYwuf?`yIP*<7Vx z{zdK+c)`;?n|aEg!IQs;r#z!P^{?+m=Bl^&p8VN7c{=&xJ$}$L-Ljtf-RP;G&7S-j zJ@wGt)2_w^>*J&SyWEFyRp8mwr_3PtM^xW|bJp7uRsI-jzc2So{Kzw34^;VMtm6T> z58_xgzcJSFfZWHhY7qZuzc2SATpGkb+V9K#1djyef3)A1`vd+Fl=IPkU+xE}@5vYw zdbHn{`~4;JEU(lmPl`}AsUCd?p2kOt{ z!3Xt`ud0&RL5_GikF*?pgszXu9y~OIEOEX3N?JZ&jq5>|(>_{@QteO=?EB%mJbGH! zF+(TGAHXk@XH2BChC)A+FAg*mx)0aWEe+F8NEd8bef9i|74NGz-9Gie^_I(UFu(Tl zs&Bcz2e1sCFrv#@PEbAnZ|9fWXma_bXQazh(JGJBi7YR9t2#!+WlQlAT<57I!RlF0 zPY*oZ{Dy;itB7&^G!o-Fzm!>1E^GN#L5zNq9v|n|ZB-B4p355!wnuh*w&yD^V)Rop zjO+Qb+xaQAeb9r{gS6-G$)!EtCYSd7kbH5FRn5EFKI=hG*KW_g^;fp=I^J%Fm30y| zXs@V8Fs#Be*K;LLJ!eHc*Yo#qo&V9+J`_r7<&nD8p_SoMZxiwPm&v8))0(_B;^jD3 z@+^iAv8HR+o3uABzbsQ-{u;=kpSodO=hyqC;duQ9p2ZjA^-A*Hc)bhHI)6=!>!)KF z*IotS>TO^Wo*m55a4ZuYfluzW{Gb zz6Cx8&h^$B2RzbF%v`BE#af<1P(6>bT(`HZcy9%E-kfK%<#wKZmfLx{Mwx_CKiN_K zapY3}i{U(98!2AuKYN0>`EMcr3*^JF{9c7~{UpTQzs>>xa1ba@(EJ|1WT=lbjd*Lj*?TtBVExOTf8 z>hmpnkomog_H@#4u>ZBUhd;n2{$<4fW5vIMas4E}A)%-Hs^$4nf0E}9;TOqMVf%Q8JPW)O+M})?dp)gZ zxwHXYeY-7}V?6D0T&MFi*MQ-Q75|!`dXA6s>i8Cxm$tm6<#jE$^Y^ygj-Oz;9lzdk zJAS|AcKnZ)+wl>oKc3&*mfP{=EVuKwvfPdzV7VPX*K#{v{|0~_xID)#x8tu{Zs)Is z{h-cMJIH7rI#}My^0Ah;wp?F_(u2-pukQyexAQ-=+|HlL+Mn9_$6MYen38$eZFwcj zFIjH4XSvj;%h}e7FK_K1Z6D?F^_JVyy<@pOzsc2kcs=Op+Vfl3a(jNuS#H;7cgyYk z>n*qQAF4nVCWHM(~VqJ-_Wy2l`1LC+UHY zm-IO?J?MD5oy!?Z$sdjFnjF*Wc)OkFi>I?ZI{vAH_=<3j$Ljc4dD56PL3ui1TtDTt z+%Bi@e2AQL`WP{UqZ$zN_WKFfR3=&+qGDs(FfCU;4tA!Fhg*VSSQ36A@pY z{3Cc>^2Ny86t45z>rqy`&&#(ET*p6+as5;tK-jJ6u$@Y3&6#onI93YoG(of>{AlGN4J*35c{U1-B#8|&MPcFFRX@UAFMlR*4;K}3LKIBIo z>ijaUsiJ;RgD#J(JNos0{h$Wzor5v+kkMN1cKpAZuFhk(TWL$&Zp&Kv?RMD4a`~(- z(MZefcDT;+DyHbcBVUhLi{-`FBTB*T>k*Z#Jbd2lCB(~lGg*$3ry|+|FL&wJNc?c* zX-@4&@^tp(8AtKb4rh={o+X|zJ;dcRh$t zgv)lD+e14O{@8x}2{_khS-9k%kNnS*ABM|0C7$khYr6LSdI{x8fbHaaU$?wF#`Tjd7n!f8G2KL1F5)uXwAS*nr(1yHM?_YCr=ZKe;Ik&kxL%g z&vHFawet6{=65OO`5wz_J-OuHVdbf0~y@0YagW_)S&(KV9Y$s!nj^u*(_g;aUI{+^6i%Qv-}Io`&<4E#&!OzmN$rJUg-P- zEbn3YK+FHK+>W=;8xOMLf5Qr?^S@wuIjg^B`yh{R^mrTV_}|Xc02@}GZsruG5bRey zelg}z{9vp6we*QqHR$@xr~bxc!`+O0F1!=@V)Yq4^n>g2*vGeTQv7PH7k z(7Tz;>hBfoZ_r%~iEn^owT$)W5GdPEiT?$j4U^&RYGJr8zug|{!*%^+$GCoafN|}5 z5mm(NBxqOSE#M!Zyy6nSk6hx%qr4pdHo3$vL}!5G*ON>9A}j}PKc_sNDp4pHbiBPj zK4bY16B0bGv3!8#A6ag%kBO}FFn0SdVD&u3s^>wL_wsD_4tYFNQuARwUAsNB^msAP zb~2x5d-%7Yw@>XC;i%5X+NW->deG&u+hOrQA8&^>Ew|fY zYs+89xPF>}ac+nIlj9tFy=Z{^T>h4p%etefH(ZxTj;S=s^>&@dZV%bx>32;%*zIAB z<#v3GXMOqFvt7#LSzkJMe38d%dyY5Cc-EtMzV*f9Z(u#r^`_hZX|(^h$))|TB44aN zqlXXR|55wTt>O|n+P`)=uVinZwf_-T4{EU6zxI`A|GxiE>lu9N@&8YgWvxG6QvJzw z|8Eel%P;@4q^YIV9&FEu`H*^(|4++DF8`lal3e~jtqS>KJyA8h2+oTr1wmwWtgk2ggna(+2a z%$_33R5bemkLN^xk>eYCe6h!`dOSNC1m|Dr@rNEShV`EF^!NC?mZNAv#l**Pqt0V{ z9golQ_(991&Fcwd$97ofx4pB+Kk)c9%P}iDeMtUKM(4ME05(9{Q8XPMde7rou|4Pb zr5+!I<0X#2;qj)}FL3+{kDs+%wxzoKL$Dvwd2IjEhNfgVdno zZU4&SzoUcA@e8x+ERW~OkruSzH}%1* z8ua|yUOG>}k9%H^=X3iSj}Oc5j(^|dqYAp?Z+Sd-A$R=z!fwCf@zPJZ<7ZlqO>z*J zrpTjs+sAqQTaULX>dv#v;~9#%<6p8IoA4m;4Ucd4_^*~@Qyt{VQT)+#ZSUgo^Oj@N z8zgA)^rJks|LO5|CEW4fdwfGlcl>uA&r`}B-_7GoJ$~JC>>`51jY>btZ~K0amnh?o zALQ}E&pe99t{{K~9)G5+JN~H0UwGCXpT3;iYkPc($Ip5^F-~ae?Ug-W^(@D(DJaNZ zkC&+MsGN5Ea?7y`GJzEz#oOM~<5w)tWIh@^-mhd{=>-5cs3V`&NCF z$Bs|;oZDM?d`&fX{H*8Qo~5SSSJ!fTr#f!G^Mczazv%XQ_1*q+1Go2W==PXKZXe?D ziyqJ4*qx`h$5(m$XO9Gtuh+}@+L+ncm;`#z7~^>~4{?mXQ*{!BY}eAf1E|IOpOI=JJfcXWI6PHwN-+3o4N zxcxhiZ|UlepYXcdU+d=f6&^q9@xGWtUJEtIJeh$!|i#-yFJ;PZvWZiKTL4PAAig3>nFN> z_9V9to9y=YJw9}bJN}HvpP1^2_xR3f?)a(G-QIMD+w;tHdy-jhKkMhHQeX06-rdi>ZrcYMb8+}_6HYd!w0 z$Mddt=O5|u0vp`%Jv_d}@@(d#!DGzEM|o@?$x-s8PIe%s@NcDnOF^!UV&-SJQCa{Ek=r{C?4pXc!`pSa_fdHg4jci!X9 z^P9)}?{&xj>G8gwy5k>ueCR%R{NElwvELnE?=!cb^Z23z?)ahy-G0>L?LT+NCqCr% z1s*SZ*d2e;;|-6vMz{!sgAn6na8JiJlQdKp2{Bo#N)qte8_Qk{&*+cKHTFE zJzngjJI{8HKXb|*KiuODPrKt!dA!+|?)dCy+}_aRr#znEtUJ#XkEi;|9Y5XUG3VUz z&w2a{kJmZx&U4t~OTKo;XT9L|cRc?3MR)uXkN@oPte4z*I(U48$G`J<`pfS8uX%i{ z$6I~l&NI{F=RKb6TX&wy9`EDv?Uv^-DTBxP-#yB2d+jT3pYXlguX()6Rd;-UkDvDV zv)A2u#{S^;WIwun&QETCl_SN`;1W$KL4tIS2oNj;Dkc+cIPRQ$L$64 zx;+(cu%h3!m&o^^DtJ#|<(# zf0<|9@mb2b{f@^!F7J*Xj~fy4bh}k_$3Iia?T0-+sIoi0NfozOsOt8#&$<0uj~}S! zj-OxM?d@>`O#QCCe2dj^$EU05_U}ACzLq<_bZxh%spIws9zXShJ3eb&w|DUP29IC$ zc)=Il`Nw+vse11CJ|5q0c`mhVWQbq?Q6AgNczl@Uxh08uKH%{hxDltGiXES#;iKu= z{wi*e&GFS6yW@{FaeI?j-TowQ#LD^Kc+DN3v!&awwsQN(Hg3P!&g~OAxcxJa=k4f@ z@9puAJ$}pMr8>Fu5Apb3k1y%$&aKmPJ^uZh?)aS(+&=Fux6hvF_F?)ZuCxxMjvx0m1G_Lz-szu@uJ@4MqCZE|~)58VEv$KT%U zj&J*++iPucdybFX{)@*?ZFR@5-sbjR+udG%hud@Rbo)(@&-~aOUv-z;lkIloxh*QPkTK2h&xYNj}P|vdXInW@tj|{r`yQmQCOi8spo>Sa;fJhEH7+%a`M`E zore6WK?X8d{uIXbQ)bI`{?3TcZ+Rg#zPOD6`K&Idj-QJ7vgYlOp6g;5*H2Y3F7f9_ z8K_IX0C`>|pEJ}zNAm6PzT^ksm`rew4PDMN@F^6Zc9?-hH*kzX8cU?=%i_+j#U z@bly)M;N$4UKx(d#j)k@50BOrtOlviS@5*vtKhlGH^EDg?}Aq)KMHR^ehJ=+{H2km zd_BqELj9wA9b5k8SnlH~{xdkb7qRh2;W)gF_4{xfUd4LG!KOUey~lcPI5uywULAgh z%F_pag?u#p7WsJiKjbsvi6cz8WI67Grz1ZH&qaO>F88aKJa^y~DE=;7|9-I^BtG5{ z^ZHft6!4DZS>XN13&Y2dSARy_-wBdD ztKgR?{ucZO`Bk{w2VU}=fhP>dEoT_@oSZxwo`<{wT9BY z{+)3>NdD>YAIKNL<^FIIzZ@QpA2-i>cyjXX@FL{x(QeC-|A_c%naJ_zd#G@FnCW;qQ@`hi@l;4t{{V9{eI$nV25 zN5)-_Ymp}p`4V_f@@O0n3?#pTc==r_X+J;1r&0WUxZJ;2;vd3yQ2goPrrh#-krH1J zh)|6Zuwn zU-FOPBgsF5PbNPG|A2f5%D;nL>R;~HC-qYS@s}ySF8n9*m*Drvo5CX#gn~ixw}+=7 z?*-39F74qN@~VihPTm48zXvMQ&5HVYnc`O>z7_eq@PXtT;A6?tBmV;ODEJEUZOHR3 z`60Oe{dYY``M-v5A-@Ixn7qmG;NzkF56Gn%ELCP=n zoSIzfIS2VdTB?kAj~hPY=IDo(cXtc{Dt2LNgs%E^Xk2$eY4Tlh=n=Ag>LtNj?(ZgZwM_VDbth zP5DNX=Y>xszll6=li!E0B2S1sACPB+pCCUl%9Q6E`6l>x=P_e^Kgyg3y(H_ zlRO0fojeizFY>hTc!^Cu{kA?|loK9J{wzEdT$i(=`jep$#lM7j`CS9a-yB|(;tRiF zG7Tfo1s_k|5_x8k_k%AZ9}eG0J|6xt`4adc@-^_YG@uCzz0P(fSN5h+v zPk?tJp9UXHJ{SHL`7-!?@(u9!$aliGlSgB_bbvetewzGA_%-q_SnnQ^&w!^)7Pp=k zqWQ!%+u#u?;;wgcej^omP1I*baw&gaaw-2aE;-&nr zkxThIlgoLSe&jM=qsV1BP9{%?a?T?!0^dlU0{#X0P52pd$$y3X3gT~(%kfw^Chqe3 z6!9hC`gk>;2?-wSlRt&``jFR!PbY5;-$*_Yew2JM{Aco&@Wd(2h?H{;JRkXXcy;oF z@V4Y<;Sm>PL=$ z!wbzM$G>BRHj(4sEkgG15$N`C0n>Uw@EXe&_ufx%{4cWV*QXCBM^?gIs<`zO>~S4H8tt3)xTI zKVkCLC$EU(Ui)__@|)1$vAY#tK*{A&=FQ%g7gp3{zwzOg>-f5*jgPim$EW$q_!P@^ z{Ktr&VY!aah4^LU-Qepj*Lez+G5I%HuJar_YkZgGI=&a;_gb#wdm{gFxL)t{Xg&3( zhwJ31=FlDTLfDQKPH#RZ>#zJ?c13dez3k@XFGZQpcPE$M?;c4mzcap=Tz+5seRBEz z>tp2dyVbvt%kNyv&C_MRsNO>yyjx*0mv* z-?z1YZ$)pP<@X;qP`vyu-X3!K-M3TZ^1E+W$>n$7ie!vCUoYzoks2zI4}{kzUkqkrC2LFnD5&RPQI{5eG z+u*;FCm645ITX4_ej4!)$-jq3W-_0Xdix!ooV+FSrzcMh&q7`Vo{PLDya@Rccp38E z@CxK_!fTSBhBqMJ0&haTAKr%i{F|m;x{}{Od@u5c@B!rMkY^bAQ}8k5&%-B>zXqR5 zJ_tUWd?tJW`9}CM@ z@NSYnkNDroTf+Y$9|4b-IqrHfAD)1GJ3I;b1$avGf8goKGrwh~mxa6{JQsNrcmeXh z@S@~1;HAjlhnFKi2CqW?1H1-#H0r-Dd0u!!@+$Baec?`EmGI@}J;uk%uRla!w=90G~r%48D-OCVV-0EBG4nf$$CFQ{f+yuZHg+-woeG z{uTTH`EB?Y>3xAsYNBA@3;i;zl70I83 zS0gV8uT5SLUZ1=(yfOJ0cysbq@HXTh!#k0G3GYt+6TB~Z)HE}{gUK_&N0L7Se}lX} zd=hzQ_zd#5;BS+!fiEWi48D^53VbbjG`5rPlNW@4L|zsCF?nV;7KMgNUUKd`Tyeqsa`4o6f@{RBp$xp&xCcg`BN}g#} zC>UCimxp&CZvlUud<48V`BL~m^1blk@ z7=9wp1;0&R1%8*j9sD2i@$mTBLct*0fu-<75?{u2BMd29Gd@*(iA$fv+BkXt0`6~ExcMPHAK(YcLyOGvI!c}bewsWx{5*LP z_&4O`;n&D(!ha@j1HVH)0Dg~r68s_g5_n{exZ8pE;fcvl!c&l6gQq2b0MA68ai4PQdO1-^=WKYSheY4|4c zZ{b_XZ^CzxKY;Hek6vn)%OUbq@Z;p!;AhAS!!MARgMUX}9sUD(L-4F8qqwLb@F8JKIA#!gUL(4N0C>D zze(N*K9#&Zd=7ap_#*N*;48`J!Pk+mhkro+34A;GY4{%UYw&~Qx8TRfqgR=Be1<#& z{33Z?`1j-$;6IT!g5M$U3BON19v&}u-1Tb-Jeqt5JQ?{3cpCB_;F-w7tIhOslBb6k zATI(hMqU$MhP(y5B6&Y}b@Hk37s%g+HzZ#JZ%V!s-kSV4yc79%@E+uU!uyjac*oS+ zF!HSMvE;?!6Um>0&meCOpGV#uzLb12{2lW5;2X$4hVLLRxyH=bKJr6|KSX{Bew_Rd z_!;sikpBXCcKCJj?(!T%<23J>Qo`4XuoeOygLDa%oE565fV9 zGrSXdL3nraa`3+7FTzKVe*qs)-UB|Fd^~(6`4ad%@{iyv$BIdCAwn zi;|CkS0Wz|uSY%&-ke;%pV*mvF5<_LuR%RbCZ7YJLoW5Rf?Vq7ee&$c^C|fl_+j$y z@YCeE;op)MfZrr927f?a6`n9(+~wN{o`$?V{8{pC@Y>`T;2p^O4>!~6Lw*GDQ^-%j zw~^m~?fd{5QmZO&*Q-AIPQsq{$z*eu^MIGr7!H0rEz$&S}$@nI`|E&0=U??cLS6y@1N{x$p^2!<>^f>)mwC&`~dp7Z3d!>^Oe{V0AXABp&X$Yr~lxJcak znSuCJCR(Eype~@CoEiO#09q%XOX>@FkY(JZbcdt6>fKNca}Zb)MZi zSPi=^*LnUx{6X?oI2buW{w4f8d5ic#`p|XD^>ni$|L^24!Xt~C&*|-kE|1*rIHlz} z&v3+Nv|Pu}$8>X%{|+xq{t_BXDe|0%uWGrT?qy83j^%o~8<6K^@`O?9O*Onmz8l_w z{5slU5Auu&OrBxn7vXP^XF&U$N}fNV$+HlyXGa$uKZ_PxWyS0Ht%&8j)^a_+FJiiz z$>+fLQvUJkGkUl~KE-e-VKFnJm%Erxir-Y(u2WdioSgzwUBsPBEavlHD zXycKnK%G{{w?=$I%XR#MO(s4y`6Ns?tK~Y+TI9)Txy~c^Hz*3%^``5gh5FM&J#wkH zS1rdP4B|Ud{>T#nhk9GC%X10k>2JAR52GyC@p+#xdB$0;<4>G4K8<`C>SqyL&zCM| zM-v{}XgL;P@Xn`J9zETanC=nsbV*F2FUjAAUn1|7)WlyW{}z6W{H0_j{yupRlqX!m zyf5u!0pgRw_5AAhI+(CfZt^YgqU5{a&ys%zuTFjxUY}gHpUucGA-)6oHFz)boA9CJ zY4r@MVLW+J_;k3g1Km#6Z`9Fhy&;$5v3JO&pS77>`dOclOTX_6@=r0{GvqSe@5oOf z{#Wv|@O$KPd>B>I%%9Bf4a6rSm-vk24-ub_T;fZTr+wc{uPV9B*Nfy*pH0c7K0A<0 zzqL2H^jk-eKaKKCAeZvYCYSOoBbV~5Czs{Bom|d)d`4auXmTm% z6mq$L<^uBg*e|Rhm-tV}Ga>#cxlH#wc}c`yCw~@xi(K;jP5vU{6P1p;9AAN_B$x7M zA(uP_;d=9kT}Y7l8H&$!!c4ES<$6DO4EvXAmh0`Rl)t{^I=)YGljmj2b^Q60#@ku0 zkI#4G__LekI?or#GuUz+A40!ojO99B?r%8Favk3S@$)R#@ikJb2Q@4wUzx)AM$3b8 zBF{F1IX$@h16;@Vl1l^4v%Mcx6mJIZmjW z60gbYVY+E8*VA2${8=s6`QJjGeB@uki;<^B{<7qmQ-;Yw{{_o+{`F{ASINJH|7p3-GX;4<&!`t_kmcS6^_&DQ^Ly5Wh4Oj4x|K)gzl{7Z zTCU5v6ZxBvhf&UUls`%rKn}L!Xk%eHX8h|BU?MvgU&_zv9{8x_e z`R#qC-tLe;xgYgkA#VK_gr_7g2hTxX9bTNgKD-LKoPTRT-VE`r$$P+ikx$17no;EM zz^9Xc0AEIa5x$B1C-`3Sm;L~JA@ag1>;mgSLA^#@wdhosE^1H4l$-fyA3Wh7> z<+1(wnfwIyYxl`7!xK~r(#2kXzYR}C{s5khJQ1c_m^>}KEO}n|^W;V0FOz?R`fNeo z81Y@nWxqd=ycOcdk+*}-AnyWSLf#wx9{Di%cJj&a1LTX~r^(-ke@ng(ev|w=_ycm; zA0@0DcloZzempI?9M9w;--Gz#Lfk-R$McahhFA0dAQexAG~{0H)`@IT21!y~K2U0&nismQ0pvy*=dFG5~* ztI1oQ{3N_KdF2r%{uT26@DAi5tfzg+lfp-nXM|59&ktWrUK;)$d1d$x^2YGb$>lit zEV*pwuae7l{x@>j&PP;@yS(1TbW@Wb!g^Ynd_LBTnjUXJ{u}bNAdk1%l%p$oQusjf z6Yz25^*%ItW{@|9FClLae~-K;d^`C7_yO|a@YCcI;NOzZh2JD!1%E)k8J_UDxXWuV zJPr95@Eqh{!HbZ8120GZ1H2~rpYTTHk!TNX$Wy|5kY|GrB`*k{Kwb(yhr9xO1$lM& z`{WJayU5$X50m$Ye?>k8evP~W>gQMT^k}z#ljngasup+omVu`wuMN*h-W*<(yc@hc z`7n4b@+t7fK_)X+L!*`Sa13yBZ7|ZJ% zd0O~2@@(+m$P2*ZRgb$IpMj?&ABFalhx~->2g&Ed%aN~u*Cby9Z$!Qs-iG{Bcu(?T z*v}3o{~7V)$^U`RB2S1s8_2W4x00uZ?OnG`8s$%^3Cuu>Bl9g8FzWf@mnf#IeyDV zF5B(G%v4-SwJl2X_`Y+wc<#=E)x%3~$lS@Bw7P<5jmyt_9aRa&Z z6L*qJKk;*N=_j5cmww+B^37<^x5#(F{~?!tR^nQ5m#_58(vwR+D-ZcW`avtmr6073T#f?|kw3M^)Z}* zOkN#6ki0p3JozB_9P%mfRpjr&KP2A+-$#B4ev14a{5$fLyUhIFAAQWAA~$z$S1)2lP`gfCSL}hLcRh%pL`>HHM#V^J|LHV)^2j?XB{S&e%4uX z>1SObmwwi-38_3tdcaY0|`2hJg#GfVK3%^2s2>u889C)UBaqDLiJQsO&cv12f z;N{3)hSwnP4{t~wHNupmC3$-IF!J`uGo3sW;un!OL;PCu*6^L=!{ArR`|UR6{Dr&} z{62X#cvOA!IoU7NhsTh2fR`g*f&EK0@(qZuPre8K8u>HG(}nyw_yF<-@Ui5we5aE) zLHuI!cJOuN-Qe5E2g5%j9|u20J`4U0xg7W2AQ)D1$xAj>5No|*gr>azg(m+;c$ z-@>0GzX7jL{u}%?@^~mu7xF~#)#S<1FIeyKE#wIiznA<8_$l%W@UO{t!mpFpgWo4# z507{$6bw@Ti{MGgo4}tW?+DLJF2^$^$h#rFGWnbE*5oPon(~bykA$xvzp&55uO~l= z_#NaI;RnfofPYDT8~z>nefY2Bk)N9K{7s$$o~WUDU+O;_JS}-acuw-N@S@~3;pNF2 z!fTPYfj1`a1#e3}8s3w9E_@jI8u(k}yWn%lkHJ@xUxsfYzXjh-9uMu|2zd$N4^|)Ilc-{N!|sXjeIElDe^br<;Z8iYmqO3Hz9uy-ky9bybt+)_$cyY z@LA;H{bv6EBp>sc@h*+x)=zKv0P>dbG2|nV|3mURh~Gs%74e72=fSU#mqnhR$rmI3 z9=UAaq8i7YFX<2Ab zo(%D`$Lh>)*YskNbe@Ol_{0e!^gJ!;Nl2?NN zL0$s>H$0yDcv6!hcuf4Nc_I7#k|)gTG?o`o)F_?t43-yG6#IP#%XR!F#OJeI$IJH@ zp0-@a=Sr_0)KJ=T9sljgfJ0R**YUFvU)^#YFW;M}Z@G@Io5AFH*>W8(|8LyVaveVt z@og>F@$!9*?&L>5H~EKIUPw{JDC4s%*ZB`1|043g;H$|K!Z(svdeY?IM&1{`A1=#% zya^9oBtHZHf&3EuH}Y%nhvYZmiJF=bneLzP)Z`E0S;-UV52~R6c`|rO@>1|h^2H#5&t|BVoz)N&pFLM9UzW4WH+*!z3Hbu-Y*HyZ7sHhE!qfAR_Nk(S4p zNd}Ko;8M=kXeaY6*X8^-a=iA$M4=hm)BZ1}I_OW>jACZEjjT6l8uE%2=5d*DUL55p^xpMk$feg)pta$OHI zGMVzVuw2)}4~Xw#xsHD}vx)C+xsLx8@q;bb@y8KA+;ScN58~glT*q(1a+zYej!%W< zINx#||8aKppoYbk>-da_Uu(IJkIbQ?)qSum*YR1Uomj5p`yhU|7qR_vGKhACljO zr*9bw2ASW7@Z#i8BsOui$uq*+k{5&zC9eRVOx_5-io7HIee&V(o#d0?2gvupPm-3 zROFl3K3}(7FE82e|7N+4|0GwCK6KY|9WVD!j^En6ua~=yzn0s)j<#IK%lGe6S+3)Y zBzK`63c{s6f5G;xF1gfm zM{;c5Lc_?bMg)@$O(ky*pHJQuzJdH0d^`Cq_G1jF_u!wCKM`f}pC-=_|BZYk{2}>Vc-r=H z>)`~v82L}|a^y*{o;D<}1@A!K5#Eb@3Vba24)_xC$Y@jUV^O%?{_E}YbR5r=v0QJ@hZPCJL**>j@p3#-hc1 zKi+a3pA_YvXt|D;-d;r>Ol<)EZ6a}zk7#Vjw`mp_4Z#cmwW0@4=2d48xCC{ zZ=ye_hHI9mHWWPm4wvP-8p}7_$pndije1CCxt_1un6H$U+x3veaveV$@i{El@joK} zQ)thRlKrZ!Gi(Klt5xFei*5n6}zdKx4W13)!=3yws??t`6X}K={ zlf_N^B+GUA(|l$8ZOe6h8^kZPT*v1^{5tYuDCbtob)M^}x1E;jJkmZ7k{3h%)0P)f z@v=QXXSvSv(n$57hO3tA_+tqI4*g=ej(-CA|A9+=qWGaaoz3UOv!UGHo0E6L@mmjgB2_G1{)C^K@(m%+0)LZS?i)Fqyg1^QlS}*ta`}Ck9pu%J z=K%S;!%R6(lh;A~x8yS2o8+w!|2MhBC+uRTlSn=3`jK*`A@7Sk*~#Vp;f2WMK5V7Q z(@=3`50=aAlUW4n!oz@gNc-d|9Utqb8m-TBc`7>CLKC)crX-Z{&KWn*;f4h{94u!t9T*p6;`0M2D;dd?9+lS=QI*U60-PJtn_M^QbJgMb+x~oyn ztZ-S5ub7XAicWPpjPdc77gjU~?PR9qI({bN=UT4gWxZQrxsESZRz0ZU9m{pRtaqC&*YTereyim= zUe=d=mh1Sc<1ylz3dkgPA= zWql!E3{PvhE>8-SKObDTAH5uL88`F{#mjvvpQrc(rWm2-$jhMJZlL^cpgdd2 zkHPm*o*Kx1jJ!Yc-zA?4Pt@IfQ08|lJT-Z8tQRH8hr%n7e*k}p{3rP9a9J;=eQwGz zkbD_@47q&YYO0kVm)L_uizq%X*1LBt*UP;I+TnW3bvs;!cD3Dd9lss%yDZo7vj06~ zxsESXK|QG9sO36dw*Oy~PsVhwlgoN~7p@nRp5JQfPY)S-m}l`%%*#+A^5j^)70L6! z8(E$aIrLLoxGb+ysLvjj>-n9J`R!x5p5J#dUn4Bn@plnF#&Wwpr&_M#J5^Kl9xN_4AwMy8K^PG#|Qa zxm`c;dz$xkJ?r?}mCWmC%kBC}Wx0-zu43ZTS+3(hK>g>1>-p8?A7{ct<;ai1UnIwA zrO>P7cM#u>d>qCVBrcX2MIz&mhk_@=NfoLp)RSIbk%*5W&j-&;-UObXd<*KQBzb?tS0{1x&;$ls3q6L>%JKQO=Z$x|W!7V`4&ljQB;=gFJFuaUQc$L}4tp2xtGkuQU1 zAm0zqM*aZ)6nVPCW_o4G<@Y?O{6352PZ06Y*Kd zC&3Gl&w`gBmwI@PTgN=>)X!ydsh^+7rGD;`%lt<6jl0~hqdY0dAHXw`hmM%f=OK>|FGeos zVXBZvBfcKF)I&3JsfUi_QV)H|r5;9*OFc{?&x7*JBA4Hl z^IMI)Ey`JsyfeHhc~5wI@&WMPa*OJS2V+*-#hxd># zLOG9+OS?Ktz7+9S$XCE`k<0u(AeZHvpnu$UBFi_1T*{M)Tn#n%agCf z`cjkpQ_NQ*a+$AIfsu>wCCI8vb_E#m-ZYzAZ~k*_MDPj+H+>|{3vHWa;fL1$qOOAB6$&b z9deo9#^kcxTa(Ljf1O;)Gk{#`XEb?idmxwg{5H9?=auAjF<+a=WxhTpm-#wKF7tJY zT;}T%xs?A$@}4Nq9dc>U|By?+GX21~?PLP-WFwb61<98pz7+WycxCeR!_D;SkSE?? zygB*%$kUEo%F~1V2;v8m%lbQx{21crke`GvA(!c{CI1ESTgYYo-9s+(dxTuB170Nm z6Zx-^*Bxf+?KXKboGAI5JRLmYAoDqWx+Ak04Ib0NrN95$N%Lk7%L^!a8|QQKSYBB9 z{;y1Yam#i5cZe@#xsI3fCsi!h@vm1kd8%8k-@WsXNu)IK5Jt2poW>2>v9%o5^!j)G^hn})r=aKv2 zmL^|Z%fweAZ&k;5P4XXKFy6>=J>4lW##>mfr<=B>@s8xkW-hwOp6ySSsUhTdvE~1MPDedEHk`{95u_uNvP>Uc9OCkI7RsGk(Z&U7p>kji0hy zm**bhFOZ*UZsM5j#9t2eE9U7s7$nE2_I>-vm8)%bk!qwp2vo2Qxh z_sGXjH@@BSpq-~RzSnX+-Irz)#&eLTde3-4@}}@Ia9NJMlbQGi9`9`B(dAi; z^7OV`*K>QclOg2A+L`=g$-V_<8d6T}}KI@=>oFzXg~2UyJo98IGr)a(Q*Y(pPgUM6ga$P@RTsN&w{ssI+@(*x*t_k@YxPH^lay{LOPnzkzZn>Ur16+sb zN1hqyqlc5n$N5S*A13v46h4jOTjG4yJaRb?wVeEBKU2j7V%G!FI#BhOOuaZ zWV{mjON))yB)F3*On#&27$ z%ah;>gDn++W(6b|Nn4y zCvc0^b^rg5J31~{mZYgzYUGMpN~VdLiaVMb*>W+?Tr*70g0m>roi}DFWhQABY71Hx zWhtd4nI$bMnI+jGr6qUT9cc@dC9VF>m+$92p6fL;|NHUy^LWg44bSV#cRAJeP$tDlA+ZsTrb$8XK&IP>k`n$ON~&F5us zje8JW<7VM+wQ)~|Yup07V(k~eHSTh_K6khfuFqxO4cB!bSHdr{aj%2xx{jOR`W)(u z@Jp?qyWv`|u9MP!(RO|q?X}+@hig0h5w7j=^c{^P5 zxf`zcb@#*dx&Ke#y3Sz;*L4n0!F8R(Gw`vkR~LLL4_fa$dmSg&et#ic>)jo${jx7y zpUY(6TJP)Ny3QdFUwfScT-Q02;JVJ?eE61qe|)|KuI=yvxaNN?T+h2t!FBw(6|U#Y zop62rdkBIH;@1yXS*}8rU*SemDYd<~<*M8i}UcW03n$HX1+73y$o_G7e^*Qgs zaBZKX;K$m!PK9e-XT!CwS-93!hHG8#fNTDj!I#*4u7PVlH^4QYFTgdQufjE-d*GVS zL-3l-=P|hE^CVn({wrMjF|hY%+V9HqJh=AP3*ovxXLq=+!`T zZRa<^wVfBiHST$EZHNDYYx`dYSDvqeYx{g0evhr|X1Lb%6}Z;*O}N(e09@;O7_Rw0 z4jU)$=7-WNyQy>8d%(W@fv+P}lvUl4KEUi<4(xIU-8D&nr6TifB6 z@b=+|yMBKDvndBRM%=Z3(#HLC#9e!R-uk78yY^@QkMHLz5qIq$v;MyYUwW%=|4_u; z``rFZy+0Ch*Z;0x^8N&Tq51FOx0wGU;;#Q-58uxwm;3Kqh2LEN|FHI3!?U;fb}xXx z&wN+-L+1NL+>M*IaWn9``H>OdCv1Q7?S9-7;ER6g{SD^I;UdpL3GH{ae$In0Hopk{ zTxI>-6lw3~Kel<^67hXP-}}q{0e8SZYu<&w;w!%Wci~?#|7pbCxcNPO`^O@_Pe`x2 z!}|z+yZN8shj)DYf57iD-^9+(DGwWe)wkao{&Djcz<0URx8D{1Y4iOe?$*_|bsZdW zx2|h#{~iJVwRsMnc+8J`8oX%!R&(X#$t`{R$_Bh1>Br4;X!HCSJinLk=cb6e`Pb}q z{w?q=?D+gObInJ;|KWRRf9}_O|38Lra+mjCzz;TmGU9IjU7P3M%sKAXSNQ(ies}GI zm-+iUMBJ_GP@DfQ@UNQh1^=D-0q`|H^!;bxe>XoS;`@b7i#DHABJSp+-&^t=Ff?sWZAbiJf`u2yyTlRcE&RpB`m3H2B7VWRMeyS07>#f>)-y3na zou9DwSHTy2%g^U}`0va=1uuWwxBp_q-MB*=_s)pBasO!TzYSmh9pBFb@Mp|_0zdyA z-~N~IzncFBe*e9`{TP1yect~Lf5<#`rT@9M|G&2I_g`eL{5)d&>#&Hs?T~%BZ+}e0 z-FEm$&-*EG{l3sQ!0-F6Z(oGZ-0yu^#ND`U8+T2_-ME{4&$qt_evSEM@Pi)k?d$OG znO_S(`TM^8jqsfw_I|6mwr6b|EOUt2$q!ka(v?SBp5`a$o1Hdp_B>woLI|GD

KR@CVF~hd*n6I=nXU{l5vW-{Vw@xSLPa z=5t=e-Fz;$*XM7CZ}oHE|0VFl&EF5d*ZdmzF^~9uJ`Vqm`DftQKI+@I;fY^(|0?_j z^Pai(%UsczC-O z{%P}1!M|dDEBuG%_rrIb=lg#Ge!ThL;1`+4?G208d%O8d;3Mwin#0NAJ0rVH~>C7@t%Qy z%lt_Awtx5SPlXrE3-HU$=SSSlGjH=;6md7tC#?N>5qIsY*8cp6yY{afgE6u|AY5i;E(*#``04w#!bG;`*$Ml z#@*s6@85@C@F(v-g}?eQ-XDYi78h5FU`-ez-w>`73o=zutCgN^;K6s#?PjHR@x%TgMukgMlyn2xL=fTggU#zL? z=v_b4oFD4@eHq&C_A1{`8vdmDtKt2Fefy)}*V}*ebt3%8jBkGi{C@Mdz+3i<#umXp zaH#KRO~l>00(;?dQN-Q$eBcz{{xW#tRPS|o(fniPu9eGAE*^dfZ+C3KAB^GJ{Y-Or&u#y!?0K{b z?c;IZ{$231%rA$(*ZkUuyX`Z!?Q>(q-S)Z5+TRSnYO~;=*6TbcS z@aBuWC(YeGx4%wz4-9VyqJ7JrUnfW0ZHM-2r_F=2BJQ?BWhdYN4E(H}y_evpzu5bE z@I!a;{&sj`SMQfa+|8$XgrCoq5qI+mcJu8U@L!tW0RMT?xBndcTf2L|4c>f-_q*V= zmwNxMxx44Kv;JR(-=lqb58wW8@K2iS-#=;p9&Fi`A9$R z`y%ef{mN^7KUc#qKEnG);fu50Z-T$#Nbk46zhiy}eAQ9DeHVV((cZrcKjd}Z2j=dc z%flV^y!$iS|I(g!|Ag<6_x)^ot=}HX!$syhMBHt+{87H$E)jRz?S#F2KYPJb_KO-1 zfbWs=?KAMLU+(=#_><hd1!Cn&kVf1kM|P%^ZR-~5B{P3yuTg3 za)0laz|TIwd)?gKbNl5X%m3|Ye^lDH|2lk)`MvNX?e*b<@axPUjkw!B>DPr{!rRDP z^BLHD{)6^qYrpw*{&C8~cE|X6ZU_Ilc>>-&*0}6u#}r-q*mNHh*`-r`!KnzpnR3+^y?n zr}=)afiE*}nY&glKZp2kg4^J?n%@Keq3=HUCH(q%{sGUzuh_=>^RD;bHSVv>_k{1a zt#6lspKpF5{Ahdq{1*73+xvc2z_)##_lx1bGQS#r)$@J(o8aFzZ^M6K{s26;gYW03 z5#Q6(^y?Gm?s?(PV_f?q|HE;_-TuAJ_T$qLckT6iFoKWz$Laa?FKfSP#9e!xe~U-l z^?%^$eh2Rmao1kw$C7ZJAKMqM^J9mayI$RTSBHPx?KJoeo`W~T?KDiV7{0xqX0Q@& zZy$qq!WUcn8oXhCHT=8gABX?L{Il?V?0v-T@Hd;^4Zp(te)u=ce**ub`4FDm#BaE# z;HR1Y4gN0k;A8%AZaI6|ws+sQHCGNlZ#mp4;w~o_SWb40cr=H5N8GjVTKoMY9?jvQ z5qIs6Ji~A3*GAm6*Lmg>;L7J&aOLwHxbnF?;_kRwwBzap5qIP2{Ou(XckSD`@Jo2B zMcmDQ&D;F^-yd<;kIvtIG~%wG_=(|{@OD$gT|bwUd_T9q?>4^!o?PPFci~ITe*piA z`NQzvnhzuH=9#y7{yO4ro(I@^#}Rk!tJeOn5qIskJk!tf?-6&~N9S)h`*?UKyy-ah z`m=odEhFyQ>pcI9BJRc=p6nhS1TTrW8~2EU?`I$QY4#t(yb}KWxA^vl!>cpiPl&i1 zH<@>%hUXz8?#AuC(YJpy{KfOV&%%Fsj`!v8w=eX50sJ?MyuUl*Za&4+-E6}Dw<_Xp zK3}u_^wX6SFZ5w`|xFD z?>~btInVpA;HRzh{uKNjtGquAU$ENyzu_mY@xIk3rqd1FJ$IbczaLDQE1w6Q@7o^& zztB7j|GfF}@O>`u{hVd4abIo6|93{(yX~1h!_V*1h`a5%(M`UeE8!2AH{f6Tv~Pa{ z{L;^Oza`?+oS*5({Yu2$xTm#z`@7*U{;c;NeB;k~{~`SQ=0At8y4kmX9R4r!-@)(u zyl?+k_!qw5ebc62hue>CUBOxY{x(hjUHkW*Z~FExgm3>X@4La@XuhwxYvuCu=Iz2S z;qBPw^xN88$=_u!x!AYg9)6SgPVj+wD&lVYjBWcI7;(41=DlkpH(YQi{HNwe z!|%Gpw?7G9f4BEHM%<0tFHE}+=11I(`=p;3_e}g^09*wx$4(&IFU&7n3Bks1tmoIlc z2EiZTSHIu;Gw>^~@E+Vaec0NZT<`(!Tf%R+()$Y|?&i}x+dqESh`af`x9;1&48Hh- z-qY{}S9yOm{KTuh9|d3YA@3)`-*S!jg1Nirw(}qCeZdN}Kjy=}{YCKam|q5e#=H){ z`Xj!dYvEhl8?aBCYd%}pd897d|IGUNKHBeM?H`Y{ciX@IrtnL6dn)2?`@iQFKcA=J z`CGmJ8-8%x`{tjVcDFVUTYb^{^CRxYEx*~f+d1NH+@DzcJ>bnR`F{3;UwWJOgW;#$ z?)?b(%4y#e(3eyAA&FZsQ1Sr?&gzytDnzr zBJSpM(#L%JF?{cjd;dFpuTOa2_*1?=)tzmd-sizHH+bIxp1jff?&j{E+b`E`>if;0 zee9FI{c-Ti%=7R&&EE*W^i#f{bKnn{uZXzYZs{36pLdvRo;Pgj{ex&Kb zJAT|7;s0xXGyH+C`u4ZOn|FHuX2hp?EBg6-H{x#GbHC=>KLkJcF7J=PU;K6NPr!d; z{(JZp-|+4K20!d>@6W=w=z5RcE;I{dLYv8-i^8?=n|C3$!sNb)n`5&^4Z~rT_UuFJR_^sx#Py5HIpR?`t z_D=BQ?7Z>5@a^op@oV9andjm6*m>i#&D~~q=Os4!p`XVBxc*<%74V&{{eQuCHLt;6 zW&R;}#{5RO#=Ql8@NIscUxS}&{d@{JAuF3`q}I={&Cu# zcV6o6Zx0`Q$@{MG>#U!>;F|w|@FV`)_j9#)CwyW?ki{*;4u#9cp6+Pc09Kl&a&|9d0u`YBsK zKY};SAC0){|Gn1Fui+1x|JmG)=Jw;E;U9O~qUFEKPx5zz6nvYF{SS_T7p?t#bC*vy z|DnxuIXroef4~J1ck|!xUN?jA{3!fd^D83m`Y&2PAC9=|=dafO6Y%->`Tkq*JI%ic z|7Op(|3<{!xJ?`Pd+@&bBN2D=d7<_5+laehLt`~0&0PmH+R zK9Ada3lVqoi7yPlgtz$-ckN$p>v|h}h4}^Mn&;j&&kw;f=6AyFZA9=8`VZ{5`q&2A z|2xv&%|C1N-~48`is#N#z4!-y;O!#r+Lx{U4iR_jU2Ws;0zcLI+1Fg_ec0A@3Vh-w z5#EaM6RrKZa67#h)Zhy@_WfLEzEybF<>dK4_I@M$cUEU_f&bb3PWV5~zYE{Q`X9iz zGXD+y8mp(9eBRGX^E}AfZw=q;3%=cp;4ioKd%^cNKM4K-d%m0uKiS%!1=qL>;5lo5 z9(;lM+u;}61s^qd=BIvLAB4Z#`uPNW7i<3+c+J}14ZqX;d+m++^}{}-`V+WPr4{1Wpo!QW?oH~ib?_rbqx{v-HZ=0o_i<|FtM=1;?)G7s#yrTzZ2`PT4> z`QGr0?D=~TT+h2Kylm}HhM#Z#PWTlM`&?cMKg|4U`0LD@@RQ8H06)Y0PI%G$KKOF; zAH%EWzkwIb{{&xX{!jQC^DWzRpO0TQe*ygS1K(~p_@Ax)zVMH|!?%Am{NL98IC#wZ zKNG%#`2zUKU-SK+2jAJ+|2KRu^DE$K^XuW)ecSi{S@^Nm{to!r=J&u~-0}VV2)>v3 z|G*boKYxU;F#k9FBJ+7)^yBFHb(#5#;P>3_+r124xAw1sUvGXi{FCNq!4ENC0ROM5 zANM-=CO`9jBm8I9&n@uZn%@l{n%@uqllf!tGi_Wyx_`g3S$JnpgP47HFPoiPoP#+0 zy>>qVzt`?3;eEUB-dnkw`ajTKpQk;qb^G`?$iVI6rXUNq(>Xy7uJa^CxYk>OYrSQ- z)?0yp)$Ui}T5k=m_1589Zv(FNHsM-t3$FEc;aYDGuJvlZ+Amt~0PVHjAzY6i!L{Bo zTGm9*Z#7Plh^jI{nbHx?XNCe`>O}n{u;uy z9Y%1icMR8hCvdGdu=nxq$L=_$^~T^@Zyc`mCg56c60Y^8;974MexmL79DK$+54Y1x zK>@zV+85z(GcUoRA7ksS!L{BxT+fFFT+Qm| z-X2`*?ZdU+0bJ`H!nNKJTkT&b0aHG;-WXi#O~SR_6kO{~!%wySm4Tmb zo`-Au6yVxEMfi;MQ-W*zl;QgSB`a`kpDJA2rv}&dX~H%C7F_dh!!`d7T=Vb3HUA!5 z^Y6no{{dX{AHy~O3H)3;E=`MK_;=+;^NDRXH&>cZ5^k3z1}V5*?i8fqcDYcHfouEZ z;d;Il;L2eUt{j%&+An3eo?jKXwnH6$jBU3DT-&(`S3PRMb)0X*wH-Qe9p}4n?Ux>W zZM}m(ZSx<&cd+N(7_R;&@T;u8#5bRtlP%2?@IB3w@Egrj@Y~F@5#Kf(Dr@u4!Oty-RED<-e3xy!*CYPI zklx@qXu$RUyb0I)@D_YGTUQ&NHt)b!nD^m&e=&f+)8;vZ-)!4?1pl@97=D_;T|sT)($72fxqS z=iv{U7vMiKFTx);FTwY)<5C&EuZ~ynw0RYtHLtTvnEPNP z;@g_X;X9ir;MbWa;WwG5;D0ht!~brcfo~S~^UK1YXP$#EGS9=$GcUmJGB3ivV_t&y z&CBp#m{;HjZtv$`g=fuc@OPWn;qNzZz#HaG_)X?5c@4;Vd z-iIG&K7gNLK7_x;d<1`+`53;+d;;Ivy?AstJDw^3$D7CC`u{+a@CSS^K?<(=m4+W} z^(zC{`{FG87Hgk_tKQ||s&@sr>Rl18dRKz0-j(61cNMtmT@|i+SA(nG)#0jl4Y=xE z6RvvKf~(%O;i`8XxawUOu6oyltKRkDs&@mp>fI2odN+cr-i_g^cN4hk-Snh$m`UYX z^)6<0Pp*0whpXNt;Hq~?xawUBu6n0+Yh2a44BD&SX?v)>>Rk@)Rqyg})w=>*^{xn4 zy(__0@5*r1y9!+Ot_oMZtHD+8>TuP&23+;730J*q!By|taMimGT=lLCSH0`ORqy(6 z)w=;)^==4Py&J(*@5XS|y9r$NF0j{Y%8%-u{=aLv>RlY|RqqmT)w?8I^)3Zhy-UMY z?=o=JyDVJwE(ce=%fnUg3h;}q4i@36cO|&~U+gOU0jqa4xawUUuKLx0|K9D0@YaOC zz>aGz_z~t^_z$h09$fwR;p%??SN~(U>h%P!dadK4a`ktcPt0Cl%T=%AaMkMsT=hB$ zSG`WbRj<=<)$0sg^*Rezz0Se4-SY5LZNC)Ys_#X(>U#;U`d)^szE|L??^U?!dkwDo zUWco`H{h!8O}OfN3!b*)Q5&8$@4!{xyKvR_9$fXk4_AF3z*XOeaMkw_Jh1y?xa#`^ zp0)ddy+2dVRo`RqsvIk@V39U$lo`rd%6zBl2j?=86MdmFC$-hr#Wcj2n< zJ-F(7AFld7fUCX_;i~T=xa#{DuKGTKtG??3N99fRJ!bFw<*M&-xaxZXuKJ#YtG=h; zs_$vI>U##R`ksfs#?F%$;HqCmxawC4uKHDmtA17Bs$W&O>Q@b}`c;Rkel_5#Uro5` zR|~HC)rPBnb>OOBUAXF353c&vhpT=K;HqCkxa!vkuKG2GtA0)3s$YSfA5v~rzhZFJ zuQ*)wD*;#iO2SpYQgGF;G+gy716Tdh@kaAk{mP-e>Q^4F`c;6deih-WUnRKeR~fGQ zRe`I1RpF{%HMr_m9j^M-fUABr;i_LPxawCMuKLx1tA2Iis$V_0>Q^7G`Za*7ehuNO zUn97lS7W&9*95NmrMjW~WUXDy-apAzzv6J!uLNBCLv=>|sD7o;Uh_!9RlhQD^_zvO ze&yh*UwOFdR{^g2RfMa4mEfvhWw`2B1+My4hpQen;HpPWxav_0u6opls~&aWsz+V8 z>QN7_den!j9u45CM?<*k(Fm@3G={4lP2j3W(~Bg+_u0yu>QT(jbIVna;&9cY1YGqf z30FNz!BvmaaMhy>T=ggmS3SzXRgdy;)uRGj^{5C}Ju1OfkIHb>qY7O0s0vp-s=-x{ z>TuPg23+;130FO8!BvmiaMhy@T=l36S3T;%Rgd~`)uRDi^=JrJJsQDPkH&D-qX}H~ zDA-|onrUtRRgYqD)uT9E^(X;XJxan=k5X{eqcmLgC<9kL%EDETa&Xn7JY4mt09QRK z!c~t-@W75QWw`251)j9_Rk-R=4X%1rhpQen;HpPWxav_0u6opls~&aWsz-geuJatg zKX31whVc1zJ;?~JdNhWs9!=nP+jVZi3+Cqe9Q#~92LGyg9IpD3fUCYF;i@kwxavz9 zuKJRJf7Q+tX5o+6`LP^)XFK1ThwFG-fa`c$gzNZLg6sHJhU@rNf$R8Ih3oiMgX{QK zhwJ#(fPcfzFEruGXA7=;cHzor53YRn;mYR#u6z#R%I65Ke2(GD=LD{N2JRxo@TS)x z%4ZC&e8%C*X9BK#CgI9w3a)&n;mT(Qu6$AU( z0j|82;o9#NxawUMu6fqrIzBhys^cxV&WE(&Iv>)3A8!A?s|&x&j*~t3PImoVAO1Ca zT{nR1e8Ld^ptT>tbv|JXf85$n;5*vu#^6PB^SOt;Zj8atHjl&gemnus>hnkVeRdp6 z!S(($4cGhA3|#L|vv9pX&B68lG!NJN(*pdxc7DGI*ZZRqTgez|;xbl{UD{mRN@|J}wZ#lT~R)jxh@1sj_<*f`?-YRhAtqND( zYVdh>e5=Eiw+38!Yr>Vc7F>C2!h5nOp2!@ z_ByHq*ZKc0T<8CLaGn3}!*%|D0N45dAzbJGNAQAuPCbU}{P_f~^XKth=H^-XOu&`T zBwYDS!IjT6T=~qvmCr0(`OLwU&pcfDEWnk|B3$__!IjT4T=}fPmCq_%`K-Z}&pKTB zY`~SzCS3V!!IjT8T>0$4mCr6*`Ru`!&purF9Ke;&Azb+!!IjVHKgx}~9#-CB?jP$$ zTzQMbmA3?3c}v2Tw-kJ_9VgRpTu<)0axCdaOJH9SKiui<*fr(-nww*tp``$hH&L=1Xte1aOG_RSKfl% z=H^y;i@}w*I9z#4z?HWoTzN~umA5opdCS0+w=7(F%fXemJY0Dzz?HWmTzMybwA89VPc zhTmz&y$M{`F9pfDc|PA>r^Vp9J|_;>^*IT+uFpxrb$w0>{*aBEhU?!QW#GD=Cky|C zy$;O5yXJZL+4j1t0N3>xMYyiVD8U=nPZ_T3F)DCfk5Pr|dW;%e*JIS-x*nqe*Yy}} zxboS7E1zAs^4WtcpMALUIe;slL%8xef-9e6xbiuHE1$vc!SuFK_|+Z4mCqPl`HaJr z&jeigOv07V6kPdC!YW@Z%w%Ndke1m+lFhN9k}X6KjQ8XnDy}p2JlVnb?FeU-wQK>?`5wK zgFT+hTeSZeT>Z!4>OTQj|7rLln|}uWlzA5Z;*ITF4cB@zaQ%L#e}G-YQ({t--b4I$Y~*z_s2sT>W(5%1;-retK}_X9(B-b1;Ixa$}#H zG5j@~dY{1c`>dz`Np{#odHbxjkL~3jCqHI0e?Jb_@0m@&Kfk$epM-Cv-)9K_n0Xqm z&o?u09Y6DMZJz>M+ouTE_9?-&eadicp9);trwZ5hsll~<>TqqJ23*^x3D@>%!L@z5 zaBZI+{2{la!&@IdG#|j9FdxGAw;Yb(+Wx`I{5Z;$wtoz+?H`A0`zPSq{zdK+-9w+YvJTX3zn z3)g<{!9Qs^>BE0)K7hY{6Q7$Q{Nl~MkKosskKu3I!ndEmW43?w3v!iDy?%?O=H~X4 zdH#M9uJxwiT5lSz^=9B&Zx*ig=HOay9qw*}XF+i`aL{ziNLmf^RWSK!|^ufjhO z^V_!uzhF!6b$H&M*A2L?hi}8ReL8S$pDtY6rw7;e>BF^s25@bkAza&M1lRT%!?k@T zaBZJp@45NZ_KCr@eUfmkHwD*v({Qaf1J`=9aIH57*Lw4Ct+xQ*YfHb*B3$b&!L{Bh zTutcb-X>h@ZNatPHeBoNz_s2kT8`op}td^UQJhE!I8( zf5tosf7Uz&-^8w0Ov9gVo`Jv5K9A1Auh-|-@VoW-HT;+61-SklRuR6t{ri^^{222x ze4%*-uHR2rh3ogw)!_G7KXv%`%^UEanK$9THE+S+X4iSP;cImLCtTN=bm0$J`yO1s z&#MpD@9i4EkFw8?hVawOM{s>!Forj+{RIAb^I*TZ`M=9N27jUbK8HAbPxAzPsd*B< z+B^lXny2CVeLxxbpR9cr{x9@5UuNEix6B7{)w>~F^=<@Ly&J<- z?K_^)3rnz01K>@A7cfy8>MG zt_WAXE5TLo%5c@Y3S9NB3Rk_W!By|-aMim8T=lLASG{Y&Rqxtx)w>Q{^{xw7z3ahM z@A`1ny8&GFZU|Ss8^KlY#&FfU30(CqIACu6RqtYO)w?)c^)3Ndy-UJX?^1BpyEI(& zE(2G+%feOfa&XnVJY4mz09U;$!d34|aMimqT=lL3SG}vkRqtwW)w?=e^{xR|y=%f% z?^%vvRl49`jvwJuhq3QeEB>-UIzYg^E~{=)=vSh{)=$+UxKUuDqQut23NhV!}b58H{hz* zO}OfH3$A+IhO1t8;HuYMxaxHeu6o^vt6mS_+HOPmt+roAaMkxQT=jhdSA7o-oSQe* z_ZVFDJq}lWPry~*lW^7d6kPQ^4Oe~7z*XO~aMkx5T=hKY!d_ZnRFy$;`fJHP)LaMkxFT=l&LSAB28Ro^>s)%Px3^}PrGna#5g|E>7| zuKGTNtGiYz)`X0PuZvIu@V{p~?IQ+Ej{o@mG)%PS^^*seweNV$x-!pL4 z_bgoXJqK5P&%;&U3vku^(zfm{mQ^qzp`-EuN++UD-T!wD!^60ig4Ah5?uAG3|IZCz*WDhaMiCGT=lCC zSN&?hRlk~W)vp#@^{Wk6{p!F~zq)YMuO3|Ws}EQG8o*V*hH%xd5nT0a3|IY{z*WD3 zSI*79>Q@Y|`W1((ekI_lUrD&?R|>BBm4>T+W#Fn`S-9#~4zBu@hpT=S;HqCmxawC4 zuKHDmtA17Bs$W&O>Q@b}`c;Rkel_5#Uro5`R|~HC)rPBnb>M$`p3hAeuKLx3Z~uJX zz7JRZ8o*V*hH%xd5&U@Te+*asn!r`Rf>+JWzv@>EuKJaPs~)A`sz+(K>QM%+dX$B$ z9_8SwM|rsFQ30-cRD`P@mEfvJWw`251+IEjg{vOb;HpP;xav^@u6opjs~)xBsz+_O z>QM)-denuh9`)d=M}4^J(EzS`G=!@jjo_+BW4P+k1g?4%96UGAsz))n>QNl7dX#{x z9wp(bM=7}KQ5vp#l!2=rW#OtvIk@Uk9QNo8denfc9yQ^rM=iMOQ5&v$)PbuWb>XTY75?fR2C{3CWg-;!`0-%{`o z#Qi+daOE=tS3dJ_<+A`+K8tYWvjkT@%W&nh0#`n(aOJZGS3c`-<+A}-KAUjmvjtZ^ z+i>Nx16Mw~aOJZHS3di2<#Pa6K8JASa|BmD$8hCy0#`nRSI^C}@)?6GpK-YInSd*w zNx1Tvf-9d{xbl{RD{pzY@>YN=Z$-HBR)YW8j)!Hq@>YQ>Z&kSRR)Z^Vb-41@fGclJ zxboJ5D{pPM^45VXZ(X?Z)`Kf=eYo;AfGcl9xbilFA8W_AF)m}F?;1lyET<^zQaJ?UI!#`rju?}4CPrGovKkdQw{u+>%x_{ z9$b0r!YT?Z)LdhR)H&TRk-q2gDY=!xboJ3D{pPMa?*i6 zWUt4%aJ}#7!S(r6AFj`*2Jn6D-<=KN3+=c!f^T8h^^M_|+3T(eT%Yd*N6gLhb=E!x z*XKKN_$}5x0spOe628&4e!LX?F!MBApQmKt$JljWS@^m3Iw}X(`Tsmz=l=_Eo&PVw zb^gBu*ZKc4T<8BQ@Wbu%;woI{&ueg0$7mCpfO z`5eNP&kYW@Z*{ox)_^N-O}O&bf-7%rxboJ4 zD{o!6^45bZZ+*D(Hh?Q{L%8xbf-7%hxbilED{sM3bMvgc#o)?Y9Im`2;L2MPuDqq- z%3B()yk+3ZTOO`DTY&34b`h>zmEgJ_sSMZkNEP^p?7UwUzLmWWtihL?*Wpju>$C=3 z*XK0hx<01`*Y!DVxUSFXz)!LBdtLZ3_ByZ!*Y!MoxUQcWz;*r15Prn-eEvpoU5_z_ z>w1g{T-Rd+N6*c(uE&VMbv;HLuIn)pa9xj)gzI{Y6kOM1WZ}wZ4z7IW;mT(Lu6!2Z z%4Z3#e3s$LX9cc&R^iHL4X%9F;mT(Nu6#D(%4Z9%e751rX9uo)cHzor53YRn;mYR# zu6z#R%I65Ke2(GD=LD{N2Cti&XXP^nS3cu#sBP7CyH2Irv}A z^YFv%dY%IOb>?Nb@?U`~|5dp1UxO?Eb-421fS+T>=O$eFZ^4!SHeC7dz?J_lT>0<8 zmH$3m`5(ZQ{~=uYAHkLXF{$p_EKMq&^6YyVKT}Z-}{}f#LPs5e} z3|#ro!u+ z>%x_{9$b0r!?fcQNJGy{yICJci|_Q_u%?Hb$xiz+7IA2nh)WhGatckF(1RfVLpLB zYaSfux6?-9x4ptYTj=~Se4cq6zO#7({$}$ee4%*?zQQ~W|8MgQ{2TWEA`5@eJO>|} z=i%Gg`;h`XZC-?*YF>hu&CBpB%`5P>c@?hzccTV>(%RSIe>QKx|6|^S&$ILDE%?Re zZTS1mJMf3iyYR=%d+?{s`|yeR0Dh8P*D-{@$$SL=gsx|Uf5v3FVs7lW(b#o?-V3ApNA60Ulef~(%8;i`8TxawUN zu6mb)tKQ||s&@sr>Rl18dRKz0-j(61cNMtmT@|i+SA(nG)#0jl4Y=xE6RvvKf~(%O z;i`8XxawUOu6oyltKRkDs&@mp>fI2odN+cr-i_g^cN4hkU2wwO{Hxx@;Hr0VxawU3 zu6mb*tKOyHs&{F)>Rkq|dY6T(-sRw`cX_z#T>-9oSA?tHmEfv(Ww`2H1+IEmg{$7x z;Hr0ZxawU4u6oymtKPNXs&{R;>Rkt}de?=k-u2+BcYV0(-2kq7H-xL+jo_+xW4P+w z1g?4)KXGpURqqmT)w?8I^(zIx&gxnk{*SHvcp3Oh=XuY=FS33LaP?n=tN#*Q{a4|t z*EP86bsetXht`0rUN_;Y*Dbi}bsMgF-GQrKcj2nnJ-F(1AFg^mfNQ%A;hA}Uzl`9j z?_;>?`vk7~9-K5cZ>sMx_>DGh9R4};1YGq!30Hkj!ByYWaMkw=T=hK*SAEaHRp0Y) z)%OBi^}PsJeJ{aP-^*~-_X=F~y$V--ufbK{>u}Zg23+;M30Hk@!ByYeaMkw?T=l&R zSAFlnRp0w?)%O8h^?e9eeILP9-^Xy(_X%9}Jve!8{#D;&aMkxXT=hKxSA9>yRo_!^ z)%P@9^*sYueb2&G-*a%)_dHzny#QBzFTz#dOK{cqGFem>q`Za;8eg&t@&9mxP46gbW zhpT=i;HqCqxawC5uKJaRtA1tRs$W^S>Q@e~`jv;Peih)VUq!g;R|&5ARfem6Rp6>$ zRk-R`4X*lChpT=y;HqCuxawC6uKLx6tA2Ihs$X5W>Q@i0`qhW4ehuKNUqiU+*9flq zHHNExP2j3u!Krieulf~(Ke?@M7l;4ZJONkzO2SpYQgGF;G+gy716TdZ!d1U=aMiCo zT=lB}SN$r&RliDb)vq#K^{WC`{i?!MziM#RuR2`ys{vR2YQj~&T5#2`HeB_q16Td( z!d1U|aMiCqT=i=JSN$5oRli1X)vqyJ^=krG{R;AP^RN09gR6ce;i^X|xav_Fu6mS# zs~%QNr9dQ^a`9u?uLMQNuAdNhEm9u48DMQM@=dX$E%9%bOFM_IV)Q4X$pl!vPx72v8zMY!rw39fonhN~V`;HpPe zxav_2u6k65s~$Drsz*(@>QM`>denxi9(CZVM_st;Q4g+q)Q77c4dALrL%8bE2(EfG zhN~V;;HpQ#>2ve1dK81J9>w9RM+vyC80%$so4mlj<0r43ho>A+QAx^UH( z9{fXgUak-S_SSy>1Ndg!cpt)bydA-HydA@Je4D^^d<$MbH_tl0#o#)=#o;=>CEz-~ zCE+^0rQo01&d(zaS3WavNV{V?6&lp_! zjKh`B1YG${!j;byT=~qxmA4#RdCS9DgP>%f(_E?jx*!Iif@TzMP7mA4^Wc^kpcw&U9vuDng)%3E;e z+&n99F}U)Ugez|;xbl{UD{mRN@|J}wZ#lT~mWL~E1-SB7gez|)xbjwpD{mFJ@>Yc_ zZ#B5`R);HZ4Y=~wgez|?xboJ9D{mdR^45hbZ#}s3)`u%^1Gw@wgez|&xbha9H8-Ey z?=iUQT^z1?Cg3_gr{SvO8Mw}eWZ^m=l7s(Y6F=`fykf`60{l_)BK*Vlx~>G*`GhiD z=MyS$olmI3bv~g6|Fex-hi_}I8yoOr&6{w&A8*0+e!LC;f*r>?aJ@h6!u9^N2Y<@? z>BIH@bO6`;(;-~%Pe<@oale1ZaJ@g8!1ewp{)V}ER^AeDH9aOEuzSKbP6<*f);-b!%gtqfP*Dsbhk3Rm80aOJHISKbHHaOJHJSKbD2$D{pbQ@|J)rZ%MfF zmVzs9X}I#1fh%uWxbl{RD{pzY@>YN=Z$-HBR)Q;UWw`QIfh%uSxbjwmD{pnU^45SW zZ*918(t%&Msn0KHG5RvjbN?yKv>R z2UkA(aOHCVS3ZYu<#PmAKF4t7a{^aBgE!61v+@~(E1z+?w2ULd{=uNScPA2$GsX{*DuxK zr`hYY23*(YG~v2Frv+bO{j}k_KBoh})7p38ms&o1a9z*ShhJ&00|)T7`4E1%z3v*p zbv?!yuIn)-@OM~0!CU9%S=VF4;JO|o4%hV<3AnDuNWyhJMhdR$F|u&wGY3~b^Kj*} z09QVXaOJZES3b*d<+B1;KC5u$vj$f_>u}|>0areoaOJZFS3cWt<+B4u8hbx~6xbm5X-(c^fGw?5& zXW`#8&%y68&%?L0<8T4Kop~9q{8!-0e-*C$*Wk*39j^R0;3GS3H{r^E3$FaP;mUsp zuKai5%6|{8{P*F?{{XK158=xH2(J8(;mZF6uKWkZxyM`OKL%I+<8b9a0ayN$aOFP* zSN_v*o^dH6Q=c~AkqP}f_+53%`F;D?%5;jcBX!H+U; z!qra;u728Z_0xgd<%mHSuJ!id&$IOo;frjZBe=Hz7_RLb3nb+Zum^a{>e|rPofook|xaQe|uin@X zJcRG%c64|f!PWm5uKp)*^&em8`%`}Qw*C|F*P18c>OTcvV)M_!@3ek$@UNTa;g6XY z;A8VLT>V$z>c0wC|26pUtp8@jZAsG&)`Gv(Z^ob<@lDL!w+{T3_Ooup?JdgmCq208 zPCw$CTOaP*0IvRr5x0*Rr;i%JFSWkL5s#UyG;N=P?`j)69dSD)G;N=Om#zP7#O;!=Y5N@fa%-QDxP5dtZC`+& zXp=2Q{Q1+C{!0m-w!zC0-yzbz0x#Kosu6!dqv zpKaT}9q~k@eFy$ln}0XrJ4M>};QIgI`Vrqb(tZFx!1^CX{Kb*>Bls=$vvI_CiL{@< ze`5Uy_5#n{-8Ira2LFQX{CLE7kF-y~_p-SOQBko>*>Q;cOz9g-I%R=<{nT@zjWh%vpZ)SgY-#QWBJmQ0hM~`m_+dppH z=y9wN@#yiY7V+qDX%g}1@h5MKas5Y+Gp&e6k0-;3M~@o`TfFNhdVI)7JbE1HM?Cs` zA4fd;yv}XvH<0T;`uuH1-2F^9{XTwY(dT2%c82rl^R6E8=<}-+@#ynt9P#M$C1*R; z^}o9&6Mk<-{G}0}M10SPXDtM-pS>d9hQnQL!dPTRjF;?aCw9`R^C51BW8Sm64J=JRy>T*Y}bpIg}-=h1w= zE#lF9-elLsxc1R}9%dnP9?j>&5s&8cXbYcfAI;~%ZbyYT=h1wA??qFdx;2@?G7F_^ zAI;~_ER@cp`8?M`={%ax`y(FB=SsWd+DG%b^_mbYK77c{HD&dDU|s z&F5P(&v`VTA3pLqPx-(4uQN-Quby2xvuOUR)icXxmn|q?7%ZNtten4mX5sAlGYeK% zg8f&{E}g&s>e<;podvdP+?u3WKj{_6SrZ}8{S`7EAYKD%=M>e-pu1?81XW)>}7aY3;E!r61y zES{Nv&N(Y*&kt5DD9tW(lU-0=6D(h|Z2rvh6$@u)RxFxvFkMx!(si)9G_z#2>ukl! zndRYHgH@{+u2{1=m@awA@+GTh$}3i`4)$NLV%f6U<>6njRTiwAbrYGteBsQh+3?HK zb5_oj&t2_1uPm{@L`QL*PJdipxMo>7+z)nl^^#??D`!@%IcL>{t5(l0d+rCb^Or{M zgk3FNvi#iXj#$3pg8AX2IVZnU7A;vCE^MYef5Ex4>$X{U-pkZf+hy7O1@jj!T`W=#T1#hFu3EbX7L{jK zl%Ko1VE)pjVQ6OD_jAJO<0mVlKk;k#`#wzX;#oK5GzqI#ubd7Leh<^PVx`}uJ~1nn z&(2&BF2*lu+3fsPYgW#>{X4Td>}1ulC9A_tx6Tq*&MsaO?wXY@HFKA;PE)@`-!Pb& zS-o`Cbcea^xlY?PHOu7l>B`aqaxF>6f z&pmgii=EnZ4$s})-yOa<{QirUtPBr_E_Q39IXxP#SQ92={`vElEDcURX~p8g=|`S& z#{5<1t}|V~h1Wg@o@=~hLD+ctiq*6GA9u=``>k3XhB{cZXz7|&rDz{+7lg--=`0t{ zhK=U@bUNGcS+Qv4ie)n^mn>gw54F9q?vEG0{=!v9FIsH5Uw+=2*)_8>uJd5k^6;>^ ze0BJj3s)^zv3ybVX}TmlM6Ox6(mfZ#d9I$FZV7jUo$-f^>3uhR^#1hc=g(id#3gy! z!iClyPkp@n<_wQx+S%?nVDtBZ36E)l=Sof(2|tOM@K{uGEfy>dcer~hxud0ZFk1?@ z$^7uH+kO@dcRZO{J^!4gYV=&En!$~P|i-d*JJ%^Vpj1Hg)sa#H<>1&&;|H(G3O0FL_JO2z`y<$es zhK125w*P6^)K70(F{eY=acAZ1d27Na&zvc7CDZ5EO!&N5u^>A0=%!ichwLNT!1j6A zn?LZB=PzHfz$WNkX6zph6CSt29Tj? znQ$`x^}>Qxs}DRldheiDti2a@bm0C6Mqm8=|Nr}q;fw0%>vr`txYWN2|4Z~mclbm1 z`Yn3gz_aJ+jz4r0$=dRD}TJe9WwEal> zT(1zaTc?(z*UE1RVSVG5t-n{=cYWjdh4As~8^2}a=j?%QeD^+x<7YQ8e%l_W^O<&c zo%O$F1LKcv{INaIjqmm-$A8fV#_!sjy#H(cJ8WS5;TQe(&qc;}@6$N`so|v7xBV5$ zOYQOc#_fMX`1tj0|CC)QQ?v)V^}Dx#9RIgrDAqTA-GwE*{a@oh5w=_3__g(n@7`*1 z{Jl3Ye$sEgK<9&}lL^0Y{d;a;{E>}cu?M>KyZ5mi|I7`H-?Z^{e%ZQNXMA`5Wqs=} z-sU?f+5_GA?$SVxzvqVbza3C?zS_E3XZ+*__J7yLkLKUKFX#9Vg*$(J`#)(X6?Fc4 zL*suxeDM0#-@e_iKf3+h`+Sby32lAj*X`tm&Zlo^{M*7GtZ)3(m;Lx%d!XC??z{oV z|7i$r{OGw1_mHHWBpJFpkz3OKuJ64KJU+1VDr#pBTf6_1;}gS!;`-K~w8!i70X|;$ zj}0HczV(l6{e5@P4R3D!?tBN=e_VK+Ti^I)JFlY88(bgmrg{5&L2y*~`1Ot7`I_JU zY0Hrt-<>ky_!n>J`Iqt|=<^GW$MOGb1JA$Fcl`Kud!QSCx9|_gzhML8$M^ORywe`9 zZyf)l8yLT07ar#9fo}ZW!#^DV`tW(azU|+)@%8!2hQ|MJ`1tj0|E`T6bDf7bH~ve* zKOFyW;m_AMes(|is36eiHU8eZ`~OejgV#5H?_R(CvsOpl_!3L1M3g$yr4dx+R*qP*}(ei-}CDq*aO}A_gT;Q_iZ5m>4W_PZ?VVg8}t9I4dlP{ zz`EPtMT*;hyn*}=ZTz*LpVluId4Q&5z#t*2^<81hK_Wz4F zu>E5X`t|oCoJv z{^S9`fTyx4(-t$G_jk=lb<~0{*Y{-?M@7i$7j>{fDe)eD^kQ zeb4`{+hE~MpO^Z3>mL6u-q7nW8$Wvddv(|e*Z)}?pX-k;^CSLW>;KdS#t$A|cm1zf z&-iZ$ZGG!c+W7kX*Ux6%^`9R8z>Snu1N&aI@#}WqZO+5PKV1LYLtEeY-Lik6K2P@d z)*XLM_=EM0Keq9s$KNBuwj93^nj4?nzjjH8;qCw0{#S=>);E6e^L4lXkzreof8_?A ze@z=-pO3q_xEts5z76Hy#vl8KP3!;B;omvF<`f>r=iCyP+T8_Vz#=z2UbLMZzc=)F zzZKNlZ>#6-1wkp?@NWC_@ktw>>*f6?!U?&@Te)7_bz1Yc&pq`6*Vf(i-JO(hYvTCn z4^Eps*UsNv=l(@DzWsRZH$DD6KUh1`^k;ML1;K^kHpn!&z}>*KW?t> zmhj(#hr;jd)BWhnGd|G|h5ILZW7{`|!_Zv&%NF^^Z}z3=qt|VFM)>&k&3~8-H*9z- z9PfK~^FKNK!}bm29H+=m1#?QRXFTA+pbK{>HcE#}@weiz) zhY9|5kx#_-KcD*pZ7Y3GhktQ@=i|3=8#cThIsN+F7d=kjSK0IbxfcF!r`Y4^dYt@w z;W9%j`@JO%g1kL`H23MdcKvF3Z}|B2ZNG*qY~ihG9lQN^M)-%@?|puJ*L2P;GvBX2 zb@UuwCu{H7!1$SWuRH!(VOJdgb0Ki;Zp7lJ{P+obAMduC+edu7PHNAtTt2&c{}l(M zlh57!-~HEvU-`=E4-R})`k;djc7H8y_20*wbnM0(J-0_T3SPU;`rKT)M?5#ftb-sM z>>su~^T;)sar}G#le=QGzd!rzv&Y{(Z4`bvexv(x?>%gf%P*~k zcXF3ZHrej7r^E4b@BPdFWA97gqpGg|-H&tr7y1^K9sljJ`}3a= zpUk^{5+ZW=K<)7N9@-6-SB6m>X($hl4BZHp2(IG18G8Ye83%(0U-6IJegg`_KRxSS zLNEQ>z?{4py8$V0-YB>vAtM-meBM8o{&nXIBeygAo>}^nyuCA^Y5!&F{y{Z(@Fjn6 z{NIAZKOt!NKydsUZvL<9T;MQZonU4j>KSSbfC&IkF_d|lUJ$BAS`u^u$*$)Od7U|*1} z1!~@^p0Pc?AvpZ{vBrQ81%JFUI8t36-2c7r({$IzA zMcz2JK0j~YYXDiB*IV0MF-DvH$7}PoP;tB_qv83shVL5(<0EqX8Lha3Br)q>V$Zd+ zCcLtoTOai0?JFhlP=ycT$j5p6ZUN$zPnraIc7jWx=#_4Am37GdkQ7;l-0(N{lAi|P zt+E5J#PPMiLmlSn2YhQ5iJbBhsLY%qxGF#%G*Vq~a)QgNV0ogV58&Mq_gHdmUrFPfW`pazv7|bwTD<%IQW7V9Dd2@2&MAaq;ao2 z@sDH2i2VKOkxzmn<~=yjJBD24=(c$e=3RFsgpNTu?v=m6hKuVe|T51Dh(>SL3ZTe?equEyx88f#D04!<@0VA+9Vld?>oADg7r z7#+6nK)fkIkVzLDnXest+SIvjBzt)fDaniy^|@nD1AA67_Lb*hcIC+4KsH>44Cvl4 zGJkpHv8S*7=YL@eyZd4+G%D|+XFaR(Rv%1|XhvD>$cn6yc))#+0vTmLtQ1cLYSRV{Yy6eSzBmSB_jS21Zlmwf~|aaTgmB4~QZ0wka*R|9gQt#GWZNh+#!f z#0QPrA+_oYh%mOkG6rX@`g_x#!xsmp4gUrM;n<|?xAq1;4{kMnhUt7FHe5rNn@z?n zWz+=s#{=asgedavXbhC+-BBA@T9tQ4RbUxDYXi&i*%(-X&x->q6U1X6PlNu3%6c=S zLCiD+yDx~!(#X)iTzAp#;chxs$y;;S%xIA{!`X|hR@}fk6NZQhc9MJFfxP!kM~|Mr zf6*dSLCt`?1n0=22|@KyX!yl&W1ucVENb4~X0X(b zbOlOlp8TVr%Ld)SAQpb6(LwbIEU5#B5j0821F4YI-0HGp!Qt-(o~8QX8v;+@yLJR^ zu&y`P?>iQs8XWPg8?JiiZA4GrJ_?;zu0UpH^V|J?;>Nf+Lf<1da}!2x2pm9}`KEgK zjq0)=mK{j+OmO7B0NDV~1^3^~xQV){YWPn{q(;}UkQ2JVC^B~y99oB*Yc`zG!3Jtk za74DyL+0;2fKjw=*!@n;&>>gNvB&fF6;XDAh|=MML(l&!xb$Fb3X*Z&-sj!K>jLtM>BHpDd|=!V@-vZmZjO)}Xpni(9K<}&Bh8ub@uRqe&y-{d?t11xn_3w(@rTEtG`(u0}Y4V#+&%4v@-8fSF>dV1HRe?dYM2P_CplRs| zjLE-_Toss)X3eeLPwjqt=dqtNf$>#bBQFeC3VHkbV8ko5xV7xxK)|y8Gu)g9N#z?! zrcAXqqEHY zFcurkpHH(c4<36cxb)&cY5ZdD-sh>egZqA!vbWcdWItzjGder(&Nmah%)~#1^de;U ze-YW?eczx7pAruSO)V0a-!zdiO!Bb7QwTCPcuE<7B?ApsHf#!ML>Pk*AvVcl7Hju& zN^G#^4?kD-7Db+rOY;#O9h$^MQ1&w{eUDA@Q0)#|t;BzT@cYBhT33zc;^24*t!DVI z_MDa~rzfYi^l~}|g_+M%r}LWOYK2Wdm;W8xV%uSgHE+?L)K80A!hF z);mTR)~YX=yV>>Xks2exBDYQ(K3H~O4drd4M<1Agc&98niiii${|Z>E(6?CgfZ2V# zb}>mto9vdEd8}4_-ZYc7i6mRRLH@D3#N@y>J+WbB2M~8~OO`33R{fjVrla+vRMe_( zS*`k$se}B*8tfUJ)udjpzL98=a5aCa%~IXOcG8BzgjlcS>-ph>aPY*M z)*oB!8ksaPIP885F(1#tpglr^mK_xwFGv!i*WSsdu?Yt=M%*JD6@I?mP$#!ZMl{!` z2ZAF-luFkR{|U$5*vnku!~eep7JXVH|9JI5>1*H$U7wh|!7Dw|r0>s;D60DB(<#a4M#; zKAdd21NOeC9J+>%Iv)o4h{BFKDL`sQdbS7m{V{LvH&LkVe7nMrXYfX9SF)qdTYy_V z(zwzqjyfq&Dn~Ymv(EEiM$P_3CGapm>ohxLq)Nvz@81yZ#~Quj@N*c7emPYINBX?Sd`CB$c2MGBrU-Pxi4~P&0J6(T2lxdI1I&)d5U zYmuXStdaJ*HPT+Q2G=Xr#PhOws3A@)aZ0;DA+f%^y+4K6SLR}kN1Ej|C$`Mb-vIH? zX`8^`reN+J_ydHD~-Wx()G!6^>k>04kv1z`)Ejq9gVwF0E@Au;k zH|Qx{I5_HuwQ(fPumkThb++SGKB1%EKX*>sJZ`XPQFGg+{js9;612Ak_=I?0`rA5V^dgkMj$XR*(|dyGg#@SIMK5$ovPO2dlZ6n~$#<)GWF@`VN8!f< zB^vI-tFYu;_M&76um1TX%p9(@!@qK+f5Yb5+JrZ@==~^q3zXgjgUiM@$6|QN(m!iX zY*qsITza(&fg2w5uUhFZo##LObiW0+!e8H59a>+#zHZ~jTD&dU6xvwV5UQzanx~+9 z_)BoHaJ;{dIva0=0`^x`ZwWPmaP8XKjg?iQ^{Y3p4Xv$gXbi2budb$tXpo;21;dS9 za=g*=`E=FuFRZQ`CAa{~UAk1I;Y--d)AhLc21-2ZrD)g-(*;zW0N3DfL!h<_u+>EI zI`h+R(L7Nl)w`6PiqtQa5zelSaCUWsvtM?7a|FRs@r`@b5{w!i*d{?~iCcM7-F&Mo znSR+OLFpe(C`+;dsl*O;QE z4XIk%cx!S?8&b8j@z&&)Hl%84t&y(kJE! z+M3*YdVDeAvPZORz3fSsQf~C0R7N6rRt6n#yE9Y*E1#l-TIIoHe-6N))f#!L#yg106M z-kL0U%<*OyOc7w0OgOvfbjDV)?6MTH%TmZ5yJwSSm!^l+A_D(6^`cAp z_eIFRLpE+du*;>4JsO$>?e*eYHP*xekv#F)S<+E6WK)x`^eMh$YEiy#+?-PXX+CdY z=9no`nwVaSJTv{Zce3E)rASlom?_dOc&rpDMW-{kl4T!1MVhk54hp;M<4;CXGN_E0 z5rBQolq~q)=IN8?4SI5nE;H^n$$9QJV`|>SY0OW1)8#Zc*GQmaPbVJ~;-qG`65FjM zO;#K$<;&jSSkoR3*{%9Sl7`aRs-fX$qIs00q>Ev&_;e?ZBORo^lsnOI&$+F8*$R0aS$hf=% zN5OO<1IXRgE@Nags3PJ|Nk1be3pO^1rr@o~g2&9rcEOZs?Ish>E;^lzoGjbij!3J? z`^mDMdzyMa+3wO5vd4}PyWQ{gBE_B7L3pj0|RiK;&0%PTVGn=6bq)JsrW zL+M@GlI>tivBu^xw?Yek*;c7#H0e^4T*{@BQ@03>yNtHi?Gxa4OceKv`DypyC4w{} zzO$4~H@PoUeEvDesUH)_&!(z0WpZdV$=eO)x|`fMonVqBGG7mP}aIEnnSRUDUWe%h^<%aqB+O}kXLEoIcmeJc`;?82Gpuga5k8FzEc zn@L-fb!|=7HReLyu8UH-ymcg%5zelSaCUWsGd;+mvHVDpovg1cg}$;B`o><+C%4bM zzhJhnG=;v>6#B+qC5b%aB z{eL+QUNaxJI`$tS$%ujJAN6bH;t zd)Q0$^fy=Nf<;o7DLCnYMNn~a^K&%8mUc?C^5 zbdl@|@lCh|Hf@BH{Uc8r(s@Qzc97JEM+NQbfU;`?%B~D3v$r@jTAxW>G%D@N2xr$u zIJ>%ZMs$j{t+%-{L#yp#{@=6a1~DLIUtlbMFv&M#4sSW+VGdwg)nG~ zVc3{$k)%<gQriqmF|d3^JKi#LO~{G@2!XVdr0Zw0AlhL?;H2XXt?Bq?>t zQpW5hId){Qrje!WEa_yVZMHc?RmQYTy5bv#m*k_K#*nZNAIb8d!E%z0z@*?4vgITl zrAk|5BWVkre0-DHv1zjGlXpaFmyPYK-E5%jhfZmnX-L8UGdt(xIq<6@s%6LH?wEAo zwZ<}e%;PrcB`Jm9@sfh%9R-fHcSd@5$E1dPj8RxGL8;VwcTB4On$d=O2}*0Mr;*c) zQ=+l=M|apf#_x{V6^ zz9E$3(Hi5|ZInNV zhh>8Vr4G`#=~h{iYCtGKtHw=fYrMoTyCTS1ctQRz>ubT z4vl6+qaZ}IO7I_sx3)=8HjhX8ShC9nf#jNiSpYYZcb|_>r@UFj>-Fv4?ZVes%-<6P zkBDzfj}nw_Lz(yuTr3OCQoq z%7vJp_C9?|R6Q%c(R>NY<|8(qRb=}g*Eu0WN(U5(NM=Y=7l-T`>F?LmC4TGzM~GuC zl1>wYjDA3mE*QB%fb}Lyf)@%Dta(_Gg)2=u3I4-u%EL;Qhl?%}-?*30nFa9u}Sdb@2_Y-xlESO_T&>Y^HJF z>{FtD^!2}x>ER9`jTUB6>iKE4&vCeL`iy*V|lljpY{N?>!o3B*Gf3MPQuwW zrjrs@ix%w=->P!K_XYTxiTb+$&o*M`g4F`N(nOVr7Sm4+(*;=^FhA|hT_CE$;u}+? z1m%kcSX)Z)&w`4t(PZg-BmIxL2$kwu40VkXl&{j^2B8F{V7@>TEXJ3;DN{v_T;8E6 z66`Y6ZIfW1K=G!?(iH~bW(mqEf)k2*<7+e{78`;ZC0K2s>Lu7~pteX*TEg2bOV=BO zjS{rlHTI%ZI;X}Ev`KtQU{WSs5HLp{+uOh zN)0KSC8!xmy+MLG0>%4EmgFykrE#=*x=^DVvM)}SGG>%Z3+cx<=z`+)0{oPTl7ia| zU1L5?wwlXRt`XmGpp;T%NEy?oQcC?vky0z9XiBO7R#}juX%S+#kP!+dZuF`qZ+5dvj*A#E#Cvg|Ly*+mo1e%ae0WlQ7#JKKR< zOZH{}Wp70qH=txAOb3-!4}MO3r;!sRsr>tr6O@6pZ*>0O;=M&Q z@Az>b-|?`-^H>2U13*t8=HQZ&s^cG+poPge`ux6k~v&mNNWUxFo%@*EN6 z72!)O8gqkh7m$XT@-h4;3^V0qZrEuz)6U{kqGYDVjhvmv3A$7!8=A&a&CWt+Dal9m z>M81++-nDNC+b?RuV8BKDeC3|{I#`3ik4e5@!ToPvX*DL3i0Y$o>DUrzwbCv)pE14 z2>U)YPf_$7Mn~mx>}EYVppu1g1uCb+PbI1T^IhApo{jSy=$H2+Yb_1uz=| zm7K|-(Q-+MqU4^=wC0&w@fSA@0$ou~VKus8Prhjn>?4yVGMyluG|@2U)Kk?nrYOo} zok=fPgfEgn?JSf9MVV3z-{gBL3O}}b3ODGCDd&Q%i2FuzOw|=v0k5YvPFtk73eDnl z6fL!<5ifBP>5S=W*~HBSO<5P{TVbi61eF0lb9j%c-n6=q-u#~R{yi!LerPppn+?1o z@Bv|`PDam}2&pSz+UaiiS#}V9rG75(({dDLt_2TQ%wu?X`%J^JI_u7}4EIr)+&ACE zP;r59A}22v-K|qqiRf;~FQr{VnIy$){icwttemWD7At3)x)o(nG1|IVRj*$?g*>yQ z7-2?kI%CQbxXKUl=jayCm7Cp;-!PLwCrn-@biFDfsFLPjN59audR` zkZSP4^Rzqy8Z0D?xe+xvRI_M1lVE-~Fk%^|OBGx`s14_VlGSMagB-59K_qneGu%8D&1xD=(;7{ZLG zO=lK|vsj{x7?B9A?M7_r6j&V?0hF2mDlb;?AIGI!D5r^R2_${9t?C+}y}|L~%o`~< z2n0LrKcM~!(TIy)wpM?wc*20y-}uLQ)!#7uC4_%YVemGBk04bO1FLvpE`zV6iraM2O9`c@Nz zn+Se;yGj4|4hDaj@c-yD@$c?tFg?Jk{_}l`m)>L_zXcyf_-hxqJSw^!J{p&u(+MnH z+SDBS=}5X<3mDNjueKYQTzVy(<`*UC=1ry>G48XuTgE}Pd$Hg1EyA5McbwOabc2iB zyc!-Z-~*2{5M+s=}{sH5IE(+-lZQ7q|_B)C;}&ME!BF zsXY}HikI3rk-Uo7Vh-}DpJ(KUh~)EJ%mnI#&wCZ^$3QZwLiMAJ>IhMNOqt|WKW1`$ zOt^_cSiQx|D#*v`$9;-Ma)qMrvl@EFSp7a%^ZR z(IZ?Di}6Q&rqV-&45mI)5BnMX1rqkdxeR9XkCiIgSAopA9UpY5_nbPJ44X{Vibf## zG34;yTVsw&6S*!G^88fD^{J2>Y{=CZ>fSmN=_So9{C%>!nC?r7Zc|D+rQmw1yvR~% zjG;WG;EVRk+kjviCMmf@Snw!Ow5DSBDh2f9j5nOB@)V_jdehsUs?w(vOsC4eRFyN8 zf@PytdX$2#R2fgjd4^JWDOG;hOcRq8%yayr`zk8CCG7op5utv8@#FoZDab^A%0$XD zVa5A#8kLsf&SeQj8fDX5JIhJ3_cK+9+iBX)!!QTMZ|_*iibtrVc>iP7LRQ?(I?sE1 zX(cN@!Hai%gcpxc&?(-#DM?KykS_17=dZFBzy5`U;$38;Nqi4A(JbDZSiFx+Hf!(v zDWc0PexF30#&mv~_+~sOZWMTP)I2}ov(X9$6i8qe0A;3Xoc+#H8`aWT>L$&1dmgJZ486~o3<0)NFZ%=#jyM}WhYb$E^>bYzR|sN+Rg4n+$OaQwlFpIsV#!V z`c+CynFT`tT%*iNl+ft9#%A>e)XXNJXQ}o2&I9VrUXro%Fayx;BPv9>eEvi^^^9SY ztS0Ww`p&z+G-^Ye^qo&AH@l%mICi&-Br{f$lc<1OwAr}4WAyT3%OTQIU*sfH>C*c&FZp5o8b(^K8wSLS;%Zw z%M!cH@aIgk%Rn!M8y$9BoRaebTZdqRoRafL0lMZgV4SN!N7nV;Y35TiHLFU&EUNrb zs>(S^;bN-%iAg_ODX1sZ)2Zm^D+Rq&`J$!Ln94BEF=3XaTX{6HVrDOSsP$;c>*Rv z0#pl)*`)DGfH^qdQp+(@t(dQp1iuAiN+?zWk5cWNl(jRIz>8G7&{}Ia9rn9$?BHFI zvUai(@F&$8{ytL)tQx&`0$+uNh@!!Cj@Aam9Lg4jeSpTdnC)1p6b{)?>y*Nea+G0l zr4pd!kotnl6dIt}HxctJ*b*?No@L7Ea_R1#5IBQu*~LB;_NlT@moir_;oVsS>O7)S z*e8cw4A$7En|~bb7p_*YdE74h2B1Q9IeRL)@JU8bQ)pZs@v}DT3S6zx(ny9)w^Qmr#>L#h#eDCYY zS>a*}s|yLe5@8Slz*emuCFe50bZLb-R|(K{I!i}hHHTI*bmjJF6m1&q#k5a@Ecf&H z$T7BN=WG9gvhRK&Any$K0$<(?x3BndVDe_Vl@cF5nQgBTW|muFg}+lFfGASDB#YVP z;#*bSr+Iu(M1nORpi+$%VA@ndGH4DU=9JyOC)EljZ+IfC_?gOu(>BESl*%1Mdnw;< zRIiuOeU9i}QGKjHjr9G&TKJ2aZ`S->on#h{sgqfOto5m`LRMf}-7bIey|Boa>++Yl z@yV*lP+y))DSn2kPQm>yH$G|Ir%)&O@?EOit(fJBDC6|csGmgjs#!jj>eb=^_OHGI zm#aj@CsV|v;YUh~&!sACs>@V-nv64Sie@rJR#kI|0(&;o?s={ND=-J0>6&X6=DW@; z{wgUdam_FB(kEGb4`J536ktj%%`bCtnZKm!b77g+x6oDmdn%m`VmCgE|4Jn!1Gr}q zXJtwk3szQG;u0n1)N**%GAG0)eFO}2=})Na?1K$cRDMh1pH8=(w@@XK`amUOs+B(J(20 zfocX$elZ50_9<}X(xHw<4bZ+pMFxGJpnLJL2zYp4B0mtM4xEUr%aHDg=dx5x7EP=W zNY}*G3`yE2Qb1`WMbq)re=c!rc?3N{IQDTG6@N!X_OXD9#H+E76;!OmM@}t1=$bTV zaTCCV?CRBsMC-&yZVx_~AAFO_a#$c=2h5~}InZqinX7%&qJncUlP@C@WJ%?PrWLe$$1NyQ?Je@eFpbj%`@4c)3{xX&P{eLAq@o& zYBaB^=kP)+=mnUCvB$xOh$0yr!c8DW>i`Ekg4nHQ4`L|dPC)^7>X%pWqcvKcWM9e8 zzv%2Y`zn6^MZK4O4L{3d@UBHhuV(KqXM$+H%-&N`vGfV($iA*(_p%CnGO{hC<9e>* za|FMS!yed_J&Xt>Lm2-J6$h4|LKHVvC@KWpXc6!si+~SX1l)u>Him$YR#d2#WzLFpo(7xGRZZ*BvX3-SJRLGPRW?#T4&Lsz3Xi;*J z*W|o7+oZX~r>v|3u~1%TDz6vH!z5}8DQ_@EG+LBzhH@5N=TZX-{HjLLpjLI&@N>~B z6MODW5X}iz7~U_cxP=t1WxB4^gt9A5WmlTYt}>NfWx*179+!KasVzNFXfDhZnhSG3 ziW6Gql|r_r=3t(ouFwuD8YM5*T~pVx1vziS)U`$%rmi*Er=Dko>(uj%aGe@7Vsz?y z!*^59rvb|vHg%oRFpd=pAG5^A)W=MPj~Skt`Xf`f6*SHGv8nqfrWOWrE&e)-7Jr?g z#b0M=@ozGsFacyy$l_?~V&Rs>&rcH$p1R~HK;FJ`(yVAN0g+2dU!$hey-M6JR=I#F zLco*-(HR9D-_;qaoF^G4Tnv?*KpW$c6QE!D*-gk_<_+a(;qOkFpz7Rx!9s*=3+z3%*BS5 znM;grNdV1mnSLhs>hv?a(IRfoSv#q5S`?qTpF>kMYA?@6pS7qg_^hF_;IoFxg3lQ$ z6F{c2hB`EVkIv@|0JI@k&5(N;tgNHLX&Xs~dOpGG*L01O1ETC$A+Tr8knq=aB4=XM zZ|ZbsSkX#Qn@e*FQ>i{6R01$%JfO2lha1)H5=M2q$SBU2AC;y?xp{0F%U{I`f}R)n z^r4n(mN^k6Q(3uY8oZQwksG{R`#ntM@CwGPXs-fuCN*=n`b8JtIk8iuFNp>J<$n0( z%Pv1#lYfK?UlCi;Z&Bf^u2NR>b1HnzRn7|kqQcjOw7^UhzT*nAngJ?&Pi}swaF^Kp zOq_+neXi|_Zy&hnQh%&!@Au=E-f2piOs&KA0%f|?Cspmse%fbn{M~@*QlC+^`~6m) z$>fU3)M<+EIn>al{#w;u^e0fggCeKWsH1!nU>jZP%c_*R6PdFnNc zS5XIbg%86I8)83f5&L0_*qbb3Z{owSlH}%Js?sh@tq_GD%>tl3fzMnzuVOT6;W+AI zPJ;q7f^#op>mtFuOr;uTZvG0j85=&%pFdeQSC%N4d8JUN&Ap&{!fMGA>gL&G$%XjL zr7bqMWHvLM>r-c2+B%!HPf#6k(XbU%M_lF#GXENtZ8~`sN@Pj}^eBKIg(@ZIN&3V! zZc5It1?W11N1Tf%qn)Z?-)Ujr$&43?={J(%H!8KSg5>2t$0^uaYWfthqM1IWBOo*T z6dD0M$rsr`BzxSvokmziqpZ)Qj1LJZ<3q;6aeT;N9lxD5d_D2fMSnL!-Ad5p3#i7p z***CJa)YHvQ^$sT3yBoO7mfGR_hFP7@DzXDsJr;9GbxB-$9uHZY+`+kSBp63Csbo;S$Ms9k*Lyc>qA&^P;(gScv~cYgErBwc$0O>y>w8i`^itSMnt1atW-J zz$O31imeSyCv{20QB2t5e`M`g!XMxS6l+SB=CL!4c&-idC~T@ zut;lEZUA!g8(22V%L`z9Sfk>GsK6II&O3M)%6_VOzXU!afzL|d8vr(B_n_ejR$^uE#Q zMi}tkZ+P3%mUc4oDbW^sf`oY^O9GQ6FcSc-4dYp|!iax@ck5)7{Zunk0`nzsjs#W% z*zg4|K$%(2yY)7d8RNYYcvJ#UO5oQL_&oq-*q;G3EX0SrwgZ@ckh=9;VC&U&^hwXL za{2)YTq}VaB=9i+8#cf+x~8A6CH39(Vr$<`fB1hy-<@F@h*@O#BU-(>7RW8?mWz4a zhO0!Q3LfKqG%P#fW(nLXfv-#8`vA<``h}C0TW84JN;%a}uBNQYfP}=#FsXB^^52sz zM;k76GFg)GgYYO_lS8_nz8^!G#qcu#W^`c*Ls$NY z&f}^dh#6ZXc0gc5gk2=DQ5T;pRs!KC?i#9oT_{oy>b&|LAXv37=}rN_bWaDc^|zAY zTl(A?1G7jF)(+nh+&2K>C(JDp_#%KAGbG)|1l?j;T`7U}0GO5w05pa1A+H&qf?m4R zYX$cm(zFKwT<{ZoFwXx3aN)k$oR~hbs!`NR&8wIqdWCODL^_->J|rZn-_rSz=mNq| z@&`rDj6IM>SAJaQar!|Z>Rz`r0?QU9|2*BhNv(Sq=(?xvb*t1;)V;vaGfowP^MktA zPl9Iw!P;01pl-RSrW!Z?=g-iwFpUX98A} zfGzhEy6#qsblS7zH|RO2{1(uSyY6N>l3Lc}xMdgods_Bei}BR``OUfp<6i~3UVU3s z&g5%dRMUfZt^s=HD?}x_=z%$gVe4UzNv2`X5;nR%M63;rkFjpjd@tyBX^bdAKEpJb zY(kKo#(ad8{*D+o+S_Dg32#&4lc-I!zQ@GGFYkr4d$T-~mtZJ+lF?E*TiqfVM*}aB z1PRVcctX(qAvYenoUNuNZK5ad66nd%qf+AuL@gz~;ctum360zAx(2phB<-bTin^7a zV)Ya1s07}U06mq!s!~7L$_Cy7&|Iw6kpQ}8o1ns4>)k~gCw?gB-9@gam7Zb+cbnMV zbPm7?u3ZYr0$c+QmS4R?Bu&xidEv83PF>a_eyjOUz+^2Jj|h;!tR-&qCUn+0ZvNa1 z-3`bpcaLKyMT~5z+q}`7RpFjs)>OK)S%Ge8Wu52dkCM!S+N_Ok{#eLWRA_VagDWO2 z?B>r<&@(Vu?QVW>buE!~xGT8HT2>ps70ql3Tke}@MN~^oJD&W}&H(E+YN#*kEZ&?| zB#izbKE4S(k)z2)S(B{oKh@f>$)aI26tZTyvlWdP%zOPV^QXRXvqnA^K3CliDt3A2 zvU^?IMNvVSMp?6KC$BzJr6awBaBFg1#qx;dVcQ1DjwdL^gP~WAJ{a+^?XR=#q0XM{ z9sRLTrHWL{E~4JxQO98xKC`D0+HC6gP!Q>3iKVGa)E6LSJ1W`bUBb>Gwu_>IvT+{c zU8ZKCtLru|lC}Jm2=7|;RODB@OU37>E~=lc8oA8^iW86nZnc7BVakQO(u|~F@$4Ry^UMno_#pQoVwB}1h&Bl8Em)H?v3(2M{?vg!} z|AKovL*WB3akLuc7u^)jX8Ct+3UssllAAi-Ec5yq;}&xX`G0q7egb_!u(UP}z}9)P z`ce0|8I`hd*v;268-ZX<7Xi31Y3cAW)l-)=>wa9-+Sr_{usJt*P4Q`UyjV;q$=pA3 zV_(7;%|-2x-P*r*Eo)uoZBn--F7lFBy1QoyucW)=ohKO#~- zGAU=~zw6G0#s2{`8yNSKo~O}O@?xgfX;`I8(|;sH~H)uNs8g%{OZOtRmppE3(Csh?#9T4e-&uYT1mysX}4lD(qdWfuOR-p2|@$bzHl0b0qi z*GU7fs*1`=%!EIxZcFJk)oUreu4Y?GZ>TNIcNXcpg^y%8eBsQHvDsN6{#5m#~yscOdXXZXHwm zn6Qo&ek5#Qg&zwWYF5Ia$AxfO*ad!~@?{|_{8XLEI*h4(LY-w6o>T*7;pghKrQ|dMP1m@o=1sr(<`bJf9_~lHS>NW*VzOo6cXWk` zp%>_~?$CKq)9Z6tcj^_ahLPQ+53<4?(2@0szPlsn&H4csa~jqVS@#Pu8>w(WFJ$5O zJQW_)=ek)*uR!Txz1*#^qDnd**AIJ3va=rLl0HThcsY=1x|a%%iNbSK_%SxzjFnmR zg#MJ5mENMdC-rB&d@)>}^$Ff-<8hN93x7bzY{aKU6fyo=Ej^g^CDDUy#r_r1gKWkA zRdueEdr)Jd&Lg=GYFsXPKkKl@-9{ao^_b?PiG)4(o%Oh;s^jv_@=sCrSjtbLtn-J^ znd+ZwJTjT;r!=9uFzcthNuQep1^DYF%nr75c+%R6pQ)mceeSFeb7Q;7*qem0jN@j_ zvLpJ4#y!t!KC1EU(GRKHKB0Nbd|4mkQdq-ou{QbRI5=Y7f0~FtrFq?o_Y(lw@Tsu8 zdLViwJL@to>LxM>zca*|z?kEjn@1+B{;tL9|FBwpyVdINS*`xQu$ndD4vlZ>SP$PR zx@Cj{7n%K9wvp%D<*kI;tHf58h27Qexx7CH)vWLFh+bXT84oM`z{B$&D?H%gDUV4z;F)iV zKIkbnc^>reWXO0P_L$G?XFcNKnUM*2)U%B7JVjO?@~mJ5=7Ar2f@a}Io;tJexTnc1 z{M56Z6_~UqJsqsTg6(IXOHHz;JbkP{hZ0#&dj?s7USZC9#&ejB6ei#o9x*ku(z6~H zpGH~fmmV=u&&9?w>pwjnUdKwm@`$OKHTTz^X%@cUc>I>qbDmk2(o3EIFU3ga%bwFM zr9XJ)^AdB%tDbUR`XW*O$y32g-=gvQrl*dVShW1rBPM?qE^m1{R7HCX?wvzvPoo#d z*ud~+?eUn=y%&wMM)y9Ht?>W%CsOf(4xe*mR;2 znWbqPkT#*{=hohyNN0QcTu$k^pDD`2&0Qs(J*{2+ZQ=CQWz3kUx2v$NvX^khecCsze7b%7`Ps>)R1#*TVHc? z<}D%qjvxrrZ-1(WWFRJ`O`XjH4uaWci8JQZ`rGE>KO zq8%;$v6ANg!OpJE=IG_lVcIBhnJQ--rlxpjx6@WRWZ}B3BPSo6S=^YN70P85aOHN3=Bks{GU^&5gno05n zPcF^{jb>M0Z#3TQV3C+?kW&fCmUKq?+B2L!9I|rVlqI9hJ00gNr##6mb+ie!y4n$A zO1(G*#Q8+}Nyet#DSNUF1CIP{Rqu>5g=TD_9BgY7R6AoGMYmJuC0XE9K%yP;+_PtJ zhx7i=h)bNaRr^UjI#Bm!b7BO_0IgZAC#*8U_6N|Kl z!jTLX5+dz5=0BblY^$7czX($t3Q4p_9GK!xSL=@B+%Qern93l|ls~ldbDFILuj9$UDNk}cosCm#JDqW+*6d(-+EqJX zP1fDf8N*3Co=$L{U8svQU{AK8vu&^~Gxg3mQ)uqZWC=tK?{vhOtU0y=x2fZqy4^W< zq6OFpmNZ8~eaK>&Oz;`9r?4TKK^A4&oiL`*8^?od@y-kmaG7$)+$k&==yM+OOt}-r z6nY2STO2$`By$bZ?2I*8cT3M;1{)4i?TjlkWr%FOk%gF*cIduD_jjJS_an`nU9sj!hAUs^+{s>ubeEN8xI1>pI*RTS=mKVdL;hqd z+6OXpzaz$!dL7zs4L>M%$enCK2VQ&2aO68=9Ywdp7FgTQ3~$yZ_0Eo35<1)&>nOTU#P?)?L;hqdx;iiG?`-Sr&1`OT&ON#X4x3`_ z3u%T!5y`gThI(fP4}Z~gT$%GTC>A| zvBn&!cgUW?hW@S$-YcMR>v6=Htl9aqGuFmC=N{bxhfYjohC>mf*%At8I0m>o9I+?c z(3k1qfFs6~dL8=D+67SVkUQCe%fe3n6opm0GtOkq&Ys<}YIeq%tQpT$W;W$IVoag8 zHxkcyy%lrH%=OdV#=g$JFy5|lu<6N+%c2o)ZKdyGrp*zDsVUyv(&eyW4p~fHU47lo z8s&(=)YIJRU}7TYIbz^?tm7%(oMG;D#Avp!J?3D^OYL*SkfMDZ{XK2rXa>)O(`+Ai z%ssjV4%2l)CkZngib!FLv&~b24bE6c(e1DWNd`FNPqu>I*9$pawp-1}NI(iZI(lOc z(qw`K&RDr_8cGAs7&Bl=(az3jJkwq7fJ5FC+PeqQ*BKr_4>)B`)Q>lE+0!hcmc9-L zuXV|u&X9c+8`}Fa=>)?DXY9!~uqPWrt=(;z?DENqj07ax(G$<$uhWozM~umOoj>Pm z4Fl)gi57?#*;-n=GkGK+GwzfY&|e4&T^db)Atk*aY;eqfJS)Uuc;sLRQ;k)aJPo$V9a2d zj~Ezq0@B8^ko{#IhtF)Ifw zI}xFd?ad%s92lN~^pq{=>5NBvGhb0SWlwE`qZ=$XC!NUM88L-Bzr|v+!MT8xevo1k zGiGLgA3X7od7pqp2bN0vGoCV}fJAd8Hhr<_*vwZR&Sj6%^}^&#rKV%Cdq=E3v%;Sd^A@W^!xUIcI9k4sVReo|oz!vZt`Y(f#oR^^Q0b zHD_{SAa!TLn@W3ISBrx;7ZbHR<4vg@M;+-;7&h&Wct_JN*Jpf@DUT*j#HJIKIGUxI zcM}}tfO%B?$qjS3Z%^*Og(oaCrM0o08F!!))>OKC``R2l0+HwuXS}JjJHOYGXn}M7 zlvZTy{uB0o#=rP^2D#Jxi1&m^cv!kY@j&jC6iVgAp zXiIO%$&gR7!?_4<3qn8r8Nv~FjfKuaf%7 zA&aT2uXm@@6DEf&rY@W%wm4Phl*iOYe|xK^^>X}8&bWg=d_m64jMLPNKl<(b$LSn1 znffm6ZONdO&bdsD?NO&s?K)ww=;_0+V>rnYdz;osqM#9-=a>x>~lTKeO? z4$pQoVl?%(M%p9zyt9&hb# z?Z#TEYbBJm!?JGt05e{ciFLLv=!^Dt_r?j=9Bu7b8QXDrSM!eWg64t2#br3sAbb0J z`tiHZh60XEA%SSa(I^FRm4AKh#`8ke8!A`VR##EEslIYUXk(~;b7=MEnp&VXb5uj+ z`nuZc%DOreU$?QgHdMWO_2$sVwQFlPR)V53lt0EK`@{I%X!%pn zCG6*L49T@Okz^(8%vdS95#JG=&q90gTE3NGqoQ zEAYGHOpDUmjK6yrB85u0E6#zAF#e`=l*7n2^mF9A(1#!F#+YNx=a}BU7))sk4=P=~ zt<7B_CQgZT^~XBm9r)pd4h5kWV~rJeJq1Z$Z(l#H3EH?E(%pp=uEgS(b%Y|FQGh*& z11g8{E&-tKz63Fl+X1&R`mSb>i>5JO^GYtUr-fP^YQ_564+45 z$nXapStb12+t++qf7nh%nyvc42ox7=!P_E>JcVCEZ$`c0wwrqG6s8>(%n`i2G@rfSXVWK1ZTZp-?rO`(k&YPn&i5{4gzJXtoQ2AV0L z-lfiq4u-lf3(<^VwWKk*0YKSA0wYD*cujkyns~CB@=)EzjkTsr&|8TJjQB(Zk`YHp zspwl8CNV?(qEO=+Q(`$QS%~AUCTVqj{l@xGuyR9HZFOk<#;WSXE=#Vit88ef*Nd;sO zNYX)XxQ1ev_wXPzrES_=y}3HHwx+4N%8uMpSzkjlvB{6T&>s%9ggcrCI(wr^Ta12Q zM`rSt%dto^^RbvtXmpi}QAXdQy~wYOGZt;-0Gl@10AVC8VKyX9YRW(TJy}Edch=ofc0)v4gXu%~{UEK)wPK5mc{xdk#4~RV34?Fmf zh#?-sX0dzW;w8kwz7xn%0lYy@MY5Zvjc|_``2AfwLik~VZY4^q3bv%`ZjS9hcOumB zGh>MOwo(P5+osTpN{M47rI<-4h8)zzR~Aez(J+#Zc#HxbTu2bjI}sx>7-Q&X)j%a6 z3}(#MoSBBFg^S^PV}$L9w}rZ!2TcJ~X9$4NWr%pJy-5)RsGb3+TWGM+$}Ys-^;W`c z{n(?h5R0MpmS#zJF;9WT;17u!tCiio1Bec^o!O&w#zL_^#mKO|T>{?|-pL7=Lj2ru zv=hme+7#<=ZN<-ZS!K5MN=>}Cn0U6LG!=z=_^@Uj(cNb-w3vO2?r)Cwc6YX7dTs5- zX=0o*z7ihnQ;@c4#9NhGTOFfiJ$`*dA?XSQoY8d&WJ*teHxf}Zf}$simHr@o5e{F> z!4}5;K8!M~o+zZqEtL7mEA*YhuhfG!-}ZJWJsnnC;3p!pn#4NP>@YaSN?|(3Vi*xn zEQNM9cOujnb6+zyzgAU5l+XgqBni<umSC^pSeR<9Olc|+n5OdG z1q%SoI#R01NTOxlqOeoCm2SQ}idLyOHUz{zxQ9kZKjlw6XAFYqe06<{+yH)J~dw8B&HeoALQF zuDhj=*Yn|RP|#AVjg|@|94BRnNiLVlw1VJ^!(@f{bJ@-P*y!^^f|NssY$A7Ym28n9 zr15;AAi-ffF1M|;u%%tA{I<85vb0ExauaVek|-?ci*iCjWKv&10LND^!p&eq68jo^X<2Seh(q)&Xy z1C*VjOcv12Qx*sLiq0&yMSCf6ktlc?TPQkQi8o`{4onYLjc^;5b|KtofL$EE4AzJR zCt`Gv)|N^Pr=f8=hiZ@G_$Cq|7h$T5Bj1W+5555gEv9Fpm8L}pi63Ib=wKpyM8Q}T zV>+bqz*o~DEF4i1ZHo?aXP`(&siBtG&gQ-{ti=Wu9FeejQ-&eSTjDsS+p;K+;4l`$ zMb>nhp_v#+DWvg`HW@6jETWI>lm?h06=%~5t$>wKixT2zeJqyQfgkykpQehH zBvo+?{*-atauUg?7>;eQ5{uHwoD=&u79Dg9MVlSg3TbLv7{7(rfz>(R5SeT9&fXC2 zMbN?nM?^999mR&Ft*>ndVrW2N&+1qpwi&0|n%*tV>uG0Bh4mErmp9NEB29x>)8`KZG9-!og>_cV`>ca6L#Ho$*er>af%7Au+g< zx-rtwjN1WN&Ed8Vc502ZEk&pHVMQEn?8Pu|j%|ssuLj(M!7>1d8XEr1vGo`iShhoY zHw4ljPU3J~S1lh*yw_V1Iq+#0I74KH$*JMu`^|& zqGd*Z&w6kx_(9_+W(9(AwALNtHlZo3Ha=KI2ffi)Un90}(Hbl%A-DN**+f>T9B3Ee zm}nTYr=_Le*pTw@;}O#x@8_9~jaQr~U}B}tpb^i4L>`V|Q6B1w_R^>^r(T{v7+su` z_YI&?9az88K0O+~6gd@nx4j+RYr`V{CgO1qCLBeOkp!7Xgw(FSmL2>62|1~`Z2)0K zsW!&8GaT3vzMLWO%{JIn*}>;CW~HPZ=x)0#)Q05-6M+QIb38vr(wRwOujz1NkW0 z%@--;7qeD2gIhRw8Rx-)iv;9U302XUrNEcG{PqOu?31NvYn;zTNQ2Oc^ArG`Vq+^n zu@GbTi#l;~#_oe4eT8UrP~g)y@r(5oYS1@G_G~>&1Sn!)(D{xiv8ZBOS)9J}7~`ex zW_~otOLU5bV6vhpf0GdAaUM~SPIEMQSLw#Wt5cl%@;RL)$DJ5pMiHlpI525n$mFmE zgLE;Q*tsAG6$=JlhM5Uv)bpW{fR&B0(PCcWS%Ec(#vpSI4#0M@b3pW4OtN5QEXJ2u zCCH-aDAsVUnw~>cEM??FUSva$)xu0Vqr@#6?5}Z$2xkZM)ronag-(~+89?rnRdE~~ ziK29iA%R7akjC;L_YFizcVKd*8!FZ=MU}Bml5L3&Qrcw^-O`VnU?OL-<7%2;Aw-0T zX~O`zRq#kLaZ?P%AB%w4&dxZNR6Le@yPFY>lriB4Rxq-HmCk++Z&k|oO$cB*#A9Qi zj|9>^D*C>x)0miPPlG=QMz>Wlf|0CgPGvJT>use5+nTPq_4E9gtSakj{8e>p&N{0E z|NU$5(iGi(^e-%3cy@7VajActtSSJW%&piiBaJi=9X9G)(wrj!Lwigfct~mbuMj{C%3#Zx0Ka` z3bek;TyJG=9Z4X$aUqJnzU>l)WVw~O6$x@RS8BNxBq4zRKPEt2?Gk`o7t~kf`nKnK z6=f0df01?gKAI&8pu5hsCdbog>eMEWhc_y-JwDDiAAXV7`4X0V8;3kMFb}wXV=#fZ z3jfNDcn0sh%QGN^mSM-@z*xEMJ1<=mIQc`UmM5gc3Y0gQpLA`|w*06rCjqP4=6L zA|Oj-7~+`~u&}=&gPR3C?ImSPC{Cqd9`Ja5HbI>NQHqlEoAC6UoX7|zG|~iI+(C_? zK@$TAcj1W`7`1@T#(Ov>rKoUomo!6)qeE&gE-eoJw>UThlp?zT)(ito{d{3dV;fB^ zZbe6=Zk^R6aaO@hV<&_T41=8GQO7%w^_XDf8-T~5r2{`k$xi-g3vwJ{dJS5nz;N_9 zbfYzsZVIwPf(&^1;q!4ADWNj!SY|a_!lMO@`Y4@}z<3-5)GCYLm5*%W ziiKLFBh(ve>xU$o@ZFP@@p7V3v|lQ!yFkyMpdD3Q^HkmC`HZ_zpW)H|c8zP6suxu0 z+75ksk3O#KVtq=ddy4MTey6MhNtX7xUC)5L*j=Pg^=KCtx9grVPm}KUXgLwx2YjKf zd9Zf?LuesrxoV!WYNBj4XFpoBz^%;_;=XpM)kJnzM zJtexgA3a8>5{RCp{ajn8YroJZ)j)<<`_@(K^wUwB3*Qv~0#fd{oTNPNAt`yRq2u7j zY{}Q9^KxySMa}C+OVB^} zULMi&w4)v_7*!X3(^~N^uizu#NdGsJB62zjY1rc~)Te06(B4y4vEbbv5tK=T1pzcc zg^v*fZQlg#M345Q;##j_D8c0(S74$(@q?)f-XB7Vrd6yXChgo}Ni%Dr?z;(`>vZ2e zdhWV=h{~h=U{~BdO?O@E9*=nVxl*jpLrX9aF|0k>UAv0ilXX>lM7amTa<%x2u57Fz z-Ck?jcveyM`4e1$NxF{iAMbG$Pk~Rp5gnmXguztkah;K`&-V1|Gd(Zr)A7Al+llxt zy%(K+d0a2@781>}e7(stpwAv!4mu3HDIV{s`bK1h>7GO6gpcoX%~vU0URS*NV2JDE zS9nT6O8^o=De6{u%8(^s#5w?{F+f*QGwp~zew9R=hM0!D>vlDfw7)2>vzU`_*oCC$ znv>MLYgJW0cY=2#h?`(ksa`as=MCuNy|9udcOBtDDFAD0_9qLmTUGTD#F6q-dlD3eyF(w4rtQL z$k=v(5xpz|+7{jCDlSBzKBFtzm#$esz4e0nqMqaZAqXkkb?P~;`6R7aU*y@LuYeG} z3B)&D<2qBN^!2*B2ZADc2@LrrI=|6%w#Y`>9GRbxl04tUhxaoqOMQ!_sLvoRxJvSn zCsq(Mx_Lf4e-V0fz+3F9n5dUiGm4)E+Et$KsX|Iv0k{<-Z(to%#=-AB-(Zh0_VtWP z_gv~aZ=&AlI%}f7s$ZY;G{{{6M31)^v%q?^hNg^5fkn=q;`s$chRJMQn+~hUI&JqZ z*IL90+52m5Ex9@n~7a`ng&^W3U%s2&!&mvgUZS>(yd??x!K;-D{pPq%@>k3p+lTzwD;~9d>x5-Y`eztNj^}KU7sI>XWn~P% ziTYVIs! zwyCa_1>O>E8bVOZc3r4y<6Uc1@Aa~{*dc}Bq?`5$~hCfpVReK=<0JkQGNP0wz9yqHqrB@dp2f( zUtjHA;r1eHehteFRhx#9hCJ`8B4PQ~ocF?bRX=S4+2PrMggVZnZHr(Haq}ROk@jJA z1>o1Np}F-3D$T7({Vfr!X`aAv%Nv5C?_f6J^AHvX+H+U#L83nulj)x^!#17347@@UVFL%P-8)F*{8;f}*}yiN~jRiA<8PhUYs&J;HGL=byVV}ka;L&aD*tbQM+^S9=%A*!O}weytYCwI$tmQ zs-C++FI|bLRbuq@Jkh1opUbJ(MOMO)Xdt3xpCoxvAj*kL$>CFi>aXcdHX z{f_2ZN9&IJ{ttU+9vD@1J^nY7Z6F~FYeazvQ9&RJI|`VEXaWJkrf8KR%Y;Od%rG;7 zprQyaL_~4N9c`;Vl;z30r_Ihm)t;rr+BL1ym# zymQYv_uS>}Z&DVx)1g_^$&)xA3*lHh+4|x@oK{KX-BwP7M$W$gNy5GE zI7^b17KfsIHyh3;qoS+-39h(|GjY5(zE$x75kck%lB^yPZYGkfEHfKPCmHpMKu9E6 zhnv|*I?3=S0+oE!pIAP~%tq2l){&94nMhJ+^Gu@CN!HO_A&?|%co%*I#HS~$;f2p% zo(t^`r@Xo>J%IP^LM^KbdQd$18$oqEKF3BscEot{9nf$+jef%CLl4;KFS6l{HvA2+ zn`8Bk)C^96s%5iHy{-U%a;#omqfrO>NM$d0mocpt|wTe=w!gstlJO}de_#&HlrrGebZ1gX%k-x@9J|Fz)Y0P7M zzCB6t=sd>f(=jqRRv-A(3-?3Z0_0c&8C%RbGB{&lzvG@Xg(OiQG(}{Y1a@)3k%7JX zhXZ<k_o#*WPU883zel`S@K#;i zf-@>=LAzXc1Z@U4XZxFN_+M@K=Qdm!g%5NO|K} z3}rj=mICW!Zk5KUQo5YEl`IvUd)Q3ks3+QsEUV7o=GM(`@H|T6*GfurI}V}zCG?H@ zkEAqy-9TyNgDH()zoRtk;Vs|ef={CSkAkz^?i4@N&kRL}8Qip6L0sD9Yg?!%4;9d| z%FvU?5WX)Fde~3Cwk7NPkfA5v(DSyzk23gvgL5Ci)dR8Pz=HZsK9M+%>to=L$8RZd zIj*Y=JwrjBmy?Nee5z?hgN^Av4SCbU}o~z&xD>J=}D$Iaep|E>m&F@#BU;w{fg&a zG_%v-ravzl9QzP2KN@@pL-<}q8xr>CX0jU;{MW>#`-vfM_VeOYZ4Bkj{`s&C zchMoPl&`YkcN53>oBlsyaMS;14L#VO+5f$Uyy^cS+JTV%oJ}0{`oh9 zoBi_x;=RDfW8jasgI^HGZf)-0erM!c-j}p9<=Lr5i>G2BA`de)DuQvGcqyxXM5qbvF{BXM=&-*ec|2T0O&!>sYcs_6FG2{6L zaT(8#1?PBvCpgzPH66Xu`#)wp4`p=7o6o+ z3!XyTr^^Lre{Lc!`_C33&-xz`d^G8QMsU{uvW@=1I!x-A!#u9!IfUcP+o=kYXU^Lx zK2Ada&3PasT@ zcH3~Hhi}Y?@JqLsi(t+yKzGo$N#Vm-)_Tu9}!>A9veP| zcIKp?ciZs(v{NYMFR|hOv*C?&vRmreW5dhx;@9f|8$S5R`0`iU@TY9}8H3~Nxx$A3 z)rOCvonu+wTWok{etf&<+VD?p_-RMQ*Yj5!KJMuF@^{$qzIc!ii>%j0HvAhKK51xt zJr~&UZ8n@w97}&j4~wt=Y#ZL=*!c2|Hhhl_pE5kYo_lS0{}J)!FR|gfZFug;_<9!F z@H=ey$2Pp8Ain-}HvD-To?IAT&v+YtrVYQ@hQDIN`_RFg>?gBr_ysn6s}29rhL_Vx zd1-f<4Zqul|J#OVkBT49W*dH!4gcDP&mJ9L|L<*hDxGwY^_^(Lue9Nx+VC-SazX09 z)`sVei|_xHHvA(SK6QM2J)3O!4>o-Mg!p>ywc*_-#+R?L;SbpGNyo+4bFU45(}wpu zKB|WfRTY?F!ymTcrF7C0+mQ}cm7YJ?@S`S2?V9q}+3$%B>@3!G(W%2d2+wdh*~tFTcm&bZD*w zOHYi-oBU>j(;>JL9DGt#-sIbD_=w8*@}qr z)Y|YnZTKfPJg+9c{ze;qj}7lWJHDRDHauX%@3-M^+wgvK;@dsdhF@yKd9KDWougH% z&kRZS}Y$X`C|?Fo{-+qLxVztqdzy0JZ-+z z@eUp8DM=dE5&iG4)CwpJ5q=lxIaBE0Nqm{$&l6uG`1iyw7d-784Q>>CA@Mr}pF;c( zf?q-WF~P4T{;c4)5r0|myNUlt@P~+hCis)YzZd*P;&{I(F5Hf95a;Vb%rhzegM|D5 z;=={+AUxvwQ2I32a{13#N1m|(Y_v5jik4S!%kmopGD)_e~f2ZJ! zsDIuk_|e4wEcnU9@jh)_*q?IZFA82v{2jr^5&u%~65>Az&iybuDc0_8lFt>K{m&Pi z{pb7a*#AdJ&lDlg{?8Pg{r{EV?EhlHdAx)K=X#wdIJe_E!7nF2uM_+s;=dRCI^s_W z{$JwH6USker$ehg|0U!z&ebd5HRS2gM6LKt$PXm>?+tl6#i-pHGfLT`>8WNZE)Q0x|;ld z!QiO>za+oc;3)sxm0JJ1g7f(OTJYydKACn*+0TX7Xg$3IUrcd_CuQfQzA6Et+u<-p19M2y} z{x<8$;!-I1o5YV3yc^A@O@jZH_(g*6B7TeD?-0LB@NP6O zydd}t;%^9^O6~fg;7f>qEjW)Ken5=la3RU3Q@>-*{kX5-pOXBMf{&)Sj}ZK9;^PJX zj(C~i3&`&of?q;>f#7cu=lhD;f3D}PLOz%B_X~aw|zozKZhm1iy;%KEWTM{KbO*oAOr*-Y;GIceCK95x-yXdx<|KI6r6l z8gcx>dG8L|UcV>!jl@3{{8HjS634jV{>csShf9C5&-_M>t!aYqAih}ekBMI(`1iy& z3(ogNKP5Onhw_%-d_VjF!TEmpBj^MZ`_ISK#|h5&(^d=4_tP#EoR6!|5uERHzD)3a z=m0F61n2vZ9~GSMAAU`6J}&*A;C$a{F74EEefhrAaf0)Gr_+gZ|9Ob|!zqS*iSk^3 z_=Nn!B!7<~k4e5S^ije2zR=x*^L?Qo5NCfp=V`lN2>uk={Z{aQa(@>5ZQ@C^v&;Iw zC7vnxU&(Gi!E=cZ5PUfCA%agPK1}dg#0v%Y5$F5#*w2;3j~DV+6E79~cf_j&AGu1$ zbH3oOko>O%|Co5K;6D*xEO;N%9~68IalX%x>s3Phd?8;${9?gtiLVztNPMHVl2;voj_a;75@DE7; z62UV_ewpBI;wuIJFX>q;_;`}PQ}7z%TLoWE{GWo?6W=HJV&dNm-bVarJP3h>uSI z)*2lLeE%>m9G?v09}C`__z!{~K|F&lO0k}N;>QX;l6ZySWyI$TUPFAb;0uYb5WI!> zMS_QkUnTfT;`a)E5%C>@uOt4P;FlBsUU1gq!GmNY&R3IsU%{^hh5r?&vk;oM*d$XIA4eTwcu}){C$FdK>W{we@Xl$!M`Q`mf*vv zUY`oyNc?-j?>0OKSOY??`eYb{CTF}e$ul{aE?!>;GdHGb%OJ}@oT}8 zFV^w8PjH?$9v0j~@=puS`d<{B^}i+fVWj6X!CBA$1RqWEDfB!S$Dil1Y{4gzJU=hS z@@2%27V^`H7Yja*_$0x3{y9nTT9Th5xR3Zk!CQ&92+ncn5S-`v3k2u(+8{W`=O)29 zKAQ#SI6o*jZx?n5zLxy|o8VUx-zzxB^KHRzBKc1Q-$eX>f^&RQ=!QaWUye_<;2fXB z1?Tu2EjZVAl;Dq&KT`zXL%d4xmx#|3{9nYqg1=5YAoyFv`T0byFUMhxkmvYcCOF6E zdcipkzY(0b%l8TX6Zx}UaQ9k0pFAaa8u8tN^Zf9d;N3|69l^Q2p9{|Q{a$dcZ|dQ( z+Xe0qIf4%+y8{I0`VJNRXp$c-_z2=t1RqVjO7P=|pDcJ8aj)RK{XJ9gQ%SyE@LJ-l z1n2GkI>DPs{wBef62D7uZkGoI=XgFQIL|-N2+s5Ki-PmKu}^TGhd&bha`N*V!MUHi zj)?6KSCV`W!LK3SUvRGPQG#=SD-xXh+wp?4KPL*#@tG|+&r7EZ&if&Y1%HtI4+;J! z;;RJbdaVvgT*T(8>%=X%{EIQzd%@K?#79fET|e^&7SlKe}8^Y-@(!M`E-?*z9x zbw6+oi0uz-H$(8lNxq-p?9X7q2a^0~!H*ogakN}; z9!IMMKY{#QFF3dFM#0NS{x^bG5Win=uJ6NwbAQ_@IQO?bg0nyW7M$brzTn&szY?6s z(NBW&IO;wywx2Xmz4{5x^%^WV*K4HUT(1d&bG^z1Xa8pjei8X|is0Oz>jb}*M#yu$HVMx4`kmlhuZINZdOacdW8}}Xg6}5&vfz7&zb*JH#6K7OUE=&c z1gvWvI6`aps zCFjMq?^4pABRJ0k0|n>(rQw1#Emy`Y* z1Ybw|0l{w}zE|*vi6-2Z0^&hyD>f)60O zje-v)-X?ez@#TUqAb!5!?EiYf+5hVWXa9dIIQ##A-~qDxnBY9myd?OAB>x}5+0V}f zzk%d`6rAO|4T){{`$@j9;M<805uE)j6r8WeO%nXyq^C-7mR}_JHzeOGIQzds@a*-v zJ{Jjo81btF=jZq~2|kkK?-iWuyIt@TN&Z>EPbdD8;B$!oTkvY)ZwuZ){1d_1pYH_k zAo^XCZ8+m|y0chULYHo+ey z{mTXC=PXtW{u0Tr7yJ$4*AsU^_}n^#>hn$^-(!Pb`GCRkRt`57gykWFeCIpE5Yg^M3UU2B%B$uokvI21h--yd(IPwBk#Hqn;Y#-y0nDyhN2wK1vJV_6~Vd zlFs)K`~~9u4UYOZX>n_a!BNlDWW8d9;4cv$D|lIomY*W{1H?}fd~m9kpJ#CN=W~s% z(+!UPTuJgi!9OD2Civ7et!TO6n~1Lx{0HLe4UYa4QM+GbaP)`od%s2S`#sw3or3dw zy0-}4*iFm-N$@9#KOy))Y-m`X75psXF9?1%-5>TQaUL)8wHoVykbjBvWFD;rxLePbQux_)_8{iL>2yvOCX^$2bQl&Sw}L?RM@hS=^-vOADC z&kwmIKU~PaLh_}CJjQH7Mw1YbtHLGXVNZxwtvUB^Ak;ONii zK%gbBKi9S&!p={{N6&2Ghc^$T*&{A2`w4zE@jSslAwEp-s?l2iID_{DR6_ntF*vsSZ%O_n z!G9uNBY5!`t^ZWPFCkth_`AfH2tH!0))N-|GU6)*&mE`bFD1_Le}d|@#gNDPt|Gq8 z;8@>BseK<8{MaE{|1*MLOZ=aL^Kt2Gf-lS0dOk2X`m>w-`NH7n&$}f5Kf&kFerM8f zt*<+LDgTLQ2wp(@C4B_Hh4?_hGiiHvjNs=IFB1HY4UYB7OVRv9gQK6k9i1ik z7@9X12!0OnTEVvvKU47i#6yA)r*U|`!O_ne^79gdqo0>hzq(5B{}8`P@JZu!eSa(X zM&b_`9PMr(yW0(pcK=KAPYOO`g4X{x!S5jcqTud{TK;vxD~Z1+_}#=m7kmu0?*ZaG zzWBWx*(0WRFReVo;HYOIjgvDCj`IB8 zhmgThp2zblgQNVWRQQ0U)8Huobb-Rwm4c6>xZG-Rb2Bi}&$U4x@Pt117P;JYZlU-0J(p%5%7BlS1i-ADQ} z4UYP=Dc?`h6Zg8|)Riyp7S@3g+-!1f?Px}>581kweN&mA3NBxBqw-*Gj zBmR!TQO|DD^Qpm6&)by$p1!%h|D^r=e$;;@A4{D3LtZys-zf%1{gWwwlHhA7Kaajy zzl-9qRPZ*6|22Z&OMX5e_-{$ii-Pm-8h&BJvnYOCuNtaXuEDWh_Z8{-9x3?O#0!XX zy}l-YrVD;K)ypsVAmUdE{xsG1w}RvEo#V1q@JEP0E%-vxzfW-9K7J+mSu~%gQ2n@G zcMuNcmq$9OI9t3Te~{$s z436^rUZYlnqkI<0FEu#I^Lu;FC5~}G|3|?eE}eoeQq;0;6ug!A9fEHpe!t+`h(9d& z--+)O{9WRE1V08HhUH7a%ZZ!sSI2ts@2%$1yvX%Em*j^FemC(N!RJxG{gvSS{)9%s zd0a0yIBlwx|CbQQev%D;6DKKbT_yPMh~FgmfXQ0^w}M|z{9eKL65lHLkyEsu9fF@p z{8{1{7WDr_EpELe_#)!_3_aN2-e0d*d@T64#J?5%0C6{UNFGP&muWpc1n2ij<_g}I zLsHl(=WKjyJb^5%E5PPar;2 z@K=c!3w{^z69nH$yi#!PC-VirkL2qFe~7qW@JEPWMjXcx){U2&gnZcsz2-Lt$NAxz z3e7hgycZyTZ{C9jSMv!C)NKYwdEUP46rA5j_abrjbE!6KeI@u+#M9}#2+Q9|yszNT z5-$}z2MfYdE%w0sWIAue?aunM1n2kM9!?zlVFvXb{2C_Y{TuYkVuNG< zJd^t8Sc7B#XS<~aNBLJszQW)r&+(jXaFlPF4Ii+~H#o}kdmCyEj`FXOywBh$&+jo< zYH*a#ngbuOv>P1dvuM0uXz-rE^JpV*nZZ%dAR3U@3En~cHwH&Ni%8G?f^Q(c-QcMI zQPT6I;K|cqB`mv%b34-MG3y<{tF^e5O6UJrz6b3m4-tG3$)7+R-9!I(lb_XsXVWA- z-{9zf9r?LX@V^sZVsO-7LwdpnM?J?*hYwg*3Vto|iv<6S_~n9sLxH%-;AnRP*}Y5f z9mM}+aP((7>Dg&;)blyX?>0EfkD37=u)HGpI^u5${yg!I1m8|}_ZuAT7G)^)mW$5U zVl$!L!)9vUUGO0BUV?8UeuUuXlHH>Ow`OVmqlk0Ant=&ePB7%r&j9&ZX>j!OR?;(D z@KcF<1%HQl3vssl92$jXwczZ}JwlJ0=8ZoI`T6Ak^M*Y7&+q$t$>2C|@Oup26?*u7 zHa=g@elpLa^WxZEsDC%bXPCh;KDjmU0n0dpqr7^#BYd4;aFkz2@_as?`@?UD&nJ2I z=UA$5Q1A)FHwu0e@h!scSc>N(HuA3;^5}n25BPxPZG)r#v*##mePVEwUqtd>8XV>C zBD>!UegWy}P7@>7m*1B=Lh$|CtTjb&-oLF9d?m%9QSb(uS633p_+vkL{7P-$V!`?S zOIHhi;|48%o8bK3WB#2l*8e+_|Fe*PkoYdaA0_^x;7=2OOYoP7evqhGX#H~_?d!#KzzC2UlYGh@S7+On*=|K`0oWDN_@NE!-?+{yny%%f}cqI zO~Gdn|5Wh##J?B3p16n3|8YAmA>K#u5b?o+pGCY-@Qa8~68tLSGXJNSx2(vi#S?3x#|?isxj(hY_z9JdNr#U+_;U{&j-$^$5S< z-;n${g7f*wPQm%S;3-1&rrdyBtBN~8;F+)eh2Xy!H=PSa+=_OBl*RGze+qT_-Dk= z7yJj}mkHjD>~0dgC-L74-kvd{@VoS`ra!z$L(Rk-y}Ux z3C{7~BRK2XC%BvDr4IyWf4&v`1d_K(Ew%8t8%;c0@bSd+1V5g5vEZADA18Q#_(_7F zMSPy%7Za}){958|g7bWJw%|OUtQDN+lWPV4%SIiSO@i+ryT2EF5Ap4SzfOFo;O`NC zLGaIrzbW{)#6K0>b*=XEd%?4bd&*+lm$xr{1RqH9g9RT!yioAth))u{l6aNizaoCJ z;Pu4o1rHJr2)>i}O2J(bVNpSXmv*7Ii7Qxy7ZGyA^I|OI{cL~n^?-rc>-zzx#|GD7v zDZgLvyC||zx8{(@3XMffT&i5Z~5S;zlDELr{+ZMsupKXG(KRX0xe|8DZ z{_GZ<{n;xx`}4WrYwzbe^v?3{;U<8{n;Qm`?FDS_GgRWqo|#>3C_Mv^YePy zf^&Uy1?T$a3C{H$Dmd4-L~!<}QgHUCMsW6Lf#B@VBEi|8Cc)XCRf2Qe)(X!1GaCed zf$|##=lz*Yg7ZATS#TF`?*!-lnQeme{>*N{+5f$Qv;X@9XaC<9oc;e?aQ1({;OxJ; z`5uNo_bc|_L)#PP?0=r%?Eg@~+5aNJ+5ZWG|C{{d`I7B2Um)bUK8pnB`Zfv9^$iHl z_3aRx>$^d4_GhEu?9V2_*`LjVvp-t|XMeT{&i?EcypZOTy@K;N-6uHrllKL$p*%k? z$nl>*`aRU&ncqS@TX25vAXjkqCr@zphxeOUKl@W6yzMBQ-`fd@N>$^>GuI~=P$54HD z3C{K1E%->P*IvQ7zWW5{`o1qX*Vjsm-CyGRdIabCW(&^s%@v&Mn$^yBu5XjzT;G7;Q>eW<1TP`JL2!=GM!`8gn*^UhdNvEr@!29c zKTo<%aE{Lo!8ty=1n2nd6P*2jUvT#SbHUmF{erXqmM6BqvHu>y+5c?8+5cR@*?)eH zmgfQXe}a$?(!5k6IQvs6IQz3m@Uy7BngqX?ctG&WiFXLj@!23akC%;tb3fc9IQPTN zf^)lU5uC@@Ho-X#y9MWQu~%@8^FG0Od-T5GJkNhFILBeX;5^Us?}u~ya=UoC#rCVn z_D=B6sNIJOo<;3aBslAzAb6PfmjwS0=`nu~9Ze>Y{30QL0r4imuOYt5;5ejq(|*EQ z!P9Ae-ynE@;u{4&lK3XU%ZP6loVRmZ1n2G6Ho?CpJv#*NLG!{c!KV=4E% z@7FC7obM~1AUNM2TOxQ5>d%#e^ZlZW1Rt-wf#)Fvr`s&8fZ%jni`5}`8R_BY47k3m zXQPm3J(~n)J(~reL;AM}&h_0Ucu$JMZowN#&tAbf{`&;y_`feW$NzJ|`;*=Mf^+=& zIR=hT8~Kw<_w_SpfAR!pe})Rq{uBw${!9>@{izY0{aGM5`?E-J_NPg3_9q}X`_myf z`?EoC_GhEu=Th7@3EoM3v*7E9^Ya!QXV$Yz$g`f^g0r5zf^Q`KpWE>Lf^$6i;VAZp zr1ZO|D2_EM8MDU}rfneDyIP2dhIO~63aMsVyTX4Jc za}yqVE`j+JvYRb9>(3Runf&MHAz06L(lbHGKSI1j@HdE83eMMc`1uK`ze&im{(#`D zpWnC2diXue8w`1>l8XOE!TJ2mCWG@S6)dn>aNaN7VsP4JQTn$DzF1Mq+F@|orBG{j z3H}j{|J??sO@xx)D>y$7vd`e8Ldm}`_=Dun=LV-Prq=8iocmiImCJ>1GoBp=H{-_F zi&5T;&wfMRj6)Ii7nC>a+hlOFURw-q`agt>;cC;*(~Rw`>E}dazBTenluB<3G{hVoV(@)FW+!pq=cpGa&VQ;IiwLY-IDyR#E3cS8>lee|5z0n)+`&+!h zj<|SPqgvD8t7~8Et*xsI`j%M*VP8ks3WXc|?P04R=xeD}q@W{M+XmK}!=N!3wt``w zveDpM<_(2wffUsHTU&i?w5p>yES(GaqQzQk>uVbtg5JdjLsiXfjeZ5=)uOqrp*iTQ z4_krua7b4OeF?=n;{y-FD*`@{P~Pj>f%l6M>0BrrRE6N%7YzD?me(6@387&xx`hVn zn`*TTMl#&tUE1zz_j#cX?SY8BU@SJGCDvfHpm|hVwD|o?Ku5qA^tROdgFdfU#WEOd z^T&9Mq3F_TOTyq}TbFhLr&Vh-K}eUi)OHn!G#tC3HHZB5OQ6miSk+l#*64r}kJlL@ zeXNVC(C^|gFLb(4Yi$dxZ1abG1t-m%KN31n{SvFOv86rKWY!G>6Ic>fHX3{&6thtig6&5Z1*E zH)=FZxd|K09;G{0b8NZVhBMn?ngDCiJE2E6_(Juu)$rHDKu|%iZELRAVS?`O3%2>f z1t1H<1*!qxD_Zf}ds6kRveIhrtP@Y1TQSc&ue7YX!V4O8{6V<5pjgjmhx&={FQZc% zF{*Np*R%7l>3jvRq-mYA)?7#-Gv{VpS%M#N7NO4i7R>xydEWlBs%%cs_m@x}b(RQT zbhh@Cw@)KsJ=T*C|8YBpOK*TE32I`N-%y35J?TH5Uy5gc<2l;?BGQWXal0n%#N6GoaY~sJRQ`eu}K>I!5Pul+x#NyRIub;NS`-5yx#vkvuidTQnI&FV56-4{E zt0V2dVpIQpWS{ph?d-o`Q~xbw|8v8BP8|D}LV5Iwx+$Bn7WCIi_Lo=4{J&tup_K1^ zh~?jeFdvHj`G;74oTd-O{&1W6FQWL%nNjw?O*Zzq{3_6IF0%a9(0Q?^jxvQH&E@(2 zC|<35wJw9~Ip{dZWdGSVK$igbViuXd-=_TbgDn38Xpa~F9aJ9InTyQh`&+qArW}{w z&L>Q1rIam$^6|$1rc1Tt4w}bs{11XZw$IzY3Sd$vnmQ|hpO&@QJQ#z#lzkC^WLWOa zcKn3*1Wwi8{3&I31BmDUqT99Pg5|m-`ac-{r2j)eOzOlEPjAOhn6K%0Q0KbJ4z#hq z4JURipQpam_9GvX(ta`7FVbR>&sTQo$x{Cz1JE4cn_>ryBmul;sS)CD(_AhzEy_~Y{2|5nlXV}1NR zp+WnVGf6q^j{tDvE0@$q34Qhj$@!(H zl%8BVzjWT*$~7P7R<2L^?!bWqRgbZ7m1}45j>-!UWLhV!$t9=afZ3zVx|7tUW)xh^Yf>nYh#AneK7dQMJiW9O8tt>K*H ztcUhjZe#70>*wWrN)Pl-%X(;Pe)rO~sra3~w!+HVT0XRK&3;eT>LjqXX2<@<&hnw_ z%Cpz(@IWeiO?m$Q%5}plFZ?9yg14aVQ?s^yUY50W>R9(h`x?tS;d{n~pM<-Yfx5A- zQqWhut|h-_#)WT(duXx8-_Iyro19<0t|5N`iVgvM&RF;3pQWyO?}Vs-k78WWKh%N6 zGn7hq{s~x`oJ`JIy%6Nq?D#=Bd3N@ioym=z@Kv7wL*=^k$_t;)x?r+$5(2aV6jrah zG=Hu7zB+#ud{=^V9hK{*<_9X*&C74f+InE!n2A{vzJQOvmt;NkO=IV%tgZ7Vy3T*= z0Cd#G&g^x`6CZ!S=bC-4#?A^$WqM(zw9~CJy&>hw+B$t`#RWUU-Pb&vzY&bM+J`i* z`3`)&12StK2VbWTT{k^@U3vbR$HCp{5ZWI;YSki_$B6KHRh^{D3wMNrmFphP$3a=S z?!o*`@SU~w>8yu(dse-bwYG28L&=^U?f z%hGR7@?>RA{jz%9a1alHGa311>wDj}KBMoN$35jcr;g3UY2>008p}JY$7YviJ@jj|2b8b0JFT~1BU0<0z zb$xHEbj=fKu_8rTvKZkD-GUJtym^&Pl122cD>0^Z1CWiGOduero5N zYu@~!dg7ba>w4#Bt-&5UwR6v!Cz7j%{jG9+awq(iR;?eCR=MV{$&IiSWDU9i-D5X8 zU(UMkyEQxeuPf*rkyd%&aga-|I`FsleIM0e2wd%pw&TudMe)<6-~7cDK3)a1JR4>& z*I%cD{wmO4y6&8`EAS1KNQWLc7FKLY8VJ=QK5p5!IY?{Z75q2K>;P$698cdr&27$?0q8yC>Lex3Ui$Nb0XX4#s*Bby={zeci5PnaDqHJ9}-j2)6?N{jUfWr zR6Kp2mSt7-g0ld9;VUT<%EF3ny`x)ypdbyN6;60*Z>FGVv zGn8;?y1>hJeIp(mc zUU{&#UkW&m0PB|<^<*vHIdNE2HRRE5|40PD^5HHBrez&*Bsex6Rt~@*rl(JV3a4P06h1Oy0P|>Iuu=xfhxBnBa~QnnK1CHgiu_JzzmF!r)6s)t#^_3@ z%+La8`ktvJx!08)7Om?Epleu)Rph2YRW0# zXaSZk2IGY())85lC_)98C{9;>ZB)8)#Ii<{dn(3bI#;_~SC!@Fzz7(7$!ZsrxuOhC zOO1=xa9ldJ%=jq4?1X5`VRjS?kq`GwN+!F`rQgO5kuL0C2yf?>PDf)9)rL?t(eZ{a&gCtpIl2zf*823Os0K zB)fm#1NkeMzt81LQ&$Lec8d$1EQqeX-vy>sVI};4OQpYn!tOt~^$MIx-P=&>AJxiC z%x?t=&)bl~B{|pg86}gBR#ox1Jg5Vgls4s~+kJ&9-3J}tXl1zFS4GWUV|a9}E6wGK zI(QwN$8>2&YOv@{SoHd+mp6imw8gL{6OARilk^Q)D^a$W%gT1SQ#DcbgXYNDh^wG0 z_H@A~^i7IWH;NmcY+?lDF{$BBTJKpsNZ7vtygr@jMUF4$nI%ve~%X^eoCb{r6x zv@B~?`tz<574%!+K7;fZ9*0rohaLwy3k4MS9i@6V6*(!tD(myma z|8@0@uKAy-V5^jE!?UDrT515(TJt@!S${jn0aCQ?sjLp;8PjGzMGy4hUVd_ zfndl5pHV}DgrOsqA=A`RC;{yj^?R5*Uu9H)j&%=>W=6P=&3Ob36}m@cd*D;8`UjF3 zZVO0}QGGaMP^&-1)hB>wp7c@f9Q@V0^wA)k44*mOQz17-g=dT|s*H}MqAD}aO*s|R z2{5FTT9rE0Wn94ot#U`kC%Zh|8JU4b^>?Kx?_tUAU13 zV$!NxORZ{id(tNA(XaABx2Ic?kq^5)o}os5ncI_{YveBk`79%UG3dj~N6N2Sm~GRq zaMwgDbFF(pG;_WCG?jS}#cp(;ZuP$#oW!O3Zr9;&!}k#nDWEPhd(!%&hq!cq#^rf| z(#eN=-k@ZXejYH*)Bj5r-0M0V3y~f*F?iCi(-Wg=&W$vLRjsB}IIu#9&msWkeS@vb(e((grQ+Kdk?qcR^=N7EnIsI=1g={%Kw z18se?K&8LN^!`Or`TsSkG|uT6-v^@nhgB+l5Aq+^T8DoKPO3=ux6)>Sl0kFe1OCJ5 z{~o#;_+VU*(YoF^5B3p9U1UU8}iMr9D5j?Qza;*Z+U=`db0{s@Nlu+)T% zCsp}(QR**f=r1a-O8vz&^prNF`r%)*m5?&JGgqat4KjA+sdNdNd3vZyEBR-Nth5S% zo*MYTC1d-Ld^C}dtF1IlrZvJkHO_L=@6c1wbwJYZq?r&U(>J^I#!*dnce%5z{=X)T z>9@Jl@M)+aN~P9&IJSxEcipU`&``JjSkR?*=ym!Sg^xgN4aE;!@PxAK6ilT}bYUkN zhG|?Nk5gtef1Im(PcwhKD=Q{HN#rMs{1lZxHt7m|nk(%D&hORsN;tny=Sy9^K|jd9 zuk&TD!*u?0oiFG7ex0And41j?t%CFVBzD?~oZp~2ecDN`fm$C-Z?L3Qx(eV6>}}Hd zD)wiy&QIgKexf05x(lbk;qEJ-Z$k0euIFxot;v;B;F@~`;6jf&1{t}7+8xDk8<^JO$}e!${0(rCtL9}~+f~guQ8md* zO)(aan!m*L9L(IK5aQAdf1@#xc8#k7{EktG^Lg53E;v)5{n83!M2*%+%BGS3BWjZ=2dOwye-?M&=;s^6w9!3gVQ3rU6q~>oKKo59-51g2$I5sGcIpT{#i9fU`*{mzpb>taekN1KgW5R6aLO)kmiJcsLDb4eOi9E3tKKaCp^!2 zniKYLp5}yqD*e%3|Dw`opMOb}kFM8w9nhE6x{(1jaVvMMGWbf{=SnHGE&vMKXv?|* z631cUHAo!aW$3OdC~(cuBX^D(xz?ng425Y>Fzr9Cl*yB!)o@As(A7=p{S^SEw-MJ& zzL?j4>cV{kc>E2)7*`FZae>k1DjMsW=PII&WODYgYAb~UB73;rNUHP*eF{OPN4ldj z1xZ%g+n^~8*QDY3i!=BYgXTk# zLD*H(8X(^dHKgZ^ROWEp

oypuQF+DL68N%Y8%8`%eiCYy>cmfK4 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≀%R@&nIsUUrK%j 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%0Dt=MtACC9s^gj_#ASn4=lqV(c- zkmKpUugr101mwlj}+?!>$6 zHX4H>vF`fR??n-J*WqC&-d%6e7(|J8*Hw<=5#~1C3LJOWiGI#Z>T%b@bex}-;dbZ! zcgNj%zY&us@$S4&cif%#&5pbC{mBxg+WjZ8?%P92_>ker?4 zOUca4@wLlL8J*NFJ0&N(T~MV}^|#oiJwn=w~>DYxLOcwBZTKW78+3WM*3%nUXzlMEby#vr`f>)6z#K zjL1w$G4bQm%`L;Svf5>2j!jO<%1RhBZ2X9XVM*D^sqIFjWoBh(nCNWZP5sA?jPw52 zE_v*jF)4<;tnAQ^NE@A(o!8ccq|s?+GEx%K$B)U#9A?Vc@T}}iUqV9m=&S_O z zqm!UI@|ii(vfG^Ilr^CTE#>`(Ms5L!SB{kIxuC+KkUQvzTN+ zZGw`txss5So}G{~dW<`cS*F{=&EifPrlk)bJ2Al`)sgydS-ZE&-jFdW+q-diim5r(z4ffCF2Nf|H_SVTBxj7t z8tJMwEIS(<`+B8YMh={m)qBK9J9J}`G7?gf%^r7acCwk4?6C3sYaN7?z$~z)r5M}NCZ$#x$ z!`(z*1n7@4!dL1 z+nJio@y?8s`8#Qh{7tx_|A1aS`zH*z{`!G^ZcDhWXRrQ!5=?vcjw?AU`zrU!l^xGq zGxc<6*TK10{r~^p@63ZE_i>iily{ANG<6jocd5(c6n8sru86shvE=p`xj4(_K6aCv zYnu9{y!)6)JVq|e7U5m~ccJC=?`@{xv$dayB47Vk)cc?NSWRGnDKB-!$Q5Uc$+4q? zhbzA8&218=j~Vr`*9WHYv$Y>5Xtw$G&zVbZ|6LPzw)Qj7ek@8#`zF=@X+PE!K3n^G zUM3Oc^$)k-+mt_B`z2@Tzx18^-_$IVv$Y==U|ZDlA62z~ktu(+_79(>eR=7U+rO}i z^;3%W3$=b%FMyuiRlg~4sE&uRIwgP<}T;@-nS8)C>nXt2sUnw4+ z>-n9k+TUQxpRN6vX}0|w6qNSmqrKezFIDtEACK$xd{I^HAFHDOCEC7C!`px4`4G21 z+1T0oA9k&6QO`eB)&6*M!`b>DHQhE`ih|OA`DhQfztgOfv$bE`(-xeL^7@D8|4mc= zZ0%Q|{U{Wa_T~8H2==le#8vh|5#`IiIrYQ|Y<3*dp`q zY~`a+UeEtkRepiF;cWTuK>qrD?vlSePv-pB8#~+hJvPYPV7C8j{MMM5v$Y>L>wm{j zo{w|;V@=_+^}iVHKO{*w8|QP6DSx*1i_yNjej`jh-2Tie+K(A*8$EM=6ghDFxmC1Z zj`sEZr;LA#v$Vey?eqG5EXg*=?MYwVt)Pnbiyryk@xRm*SZ&x@i8d<-er@TA%(sVj4bM`!QotVex=UHS_v;xQhJGwfuanAMU@F z=k|2`G^wY|!q>j2$=^8SKMB7JueWimyub2n^B27U8TGIwW&WbgKW$&v)ed7^rrNyu0 zz+krA7T%vT7aS{To^AX>58H*8FAuQHChcEi{&D-q(Z25I5-VFmj&1+@SL}7Y)b{nS zeD9O|pUd~@Wc%M!3*xVq)4vBynEu}leGuhclmBz*zN z7017VuI2`_>F*!O`1LaXw7jmrnb?0M*4^^E+y3v9gO0Ot{<&4OpWp3&+rQ4#!|nfQ z);ITEnoCW$?eDK)8<%$FDIJ$@-yu4}-J+Z;_W$;>^Ho=Qw{+fb2rYxN z1Y7con4vR8FmhFf>J45Ilajfs_WrB>|M=_0nF%&U{OXIDY*WOqzL;QB#IL@XH4@}! zUrha`h+lm%XH!fOzxran8`Tu?t1q?9?%`)&>Uc%`>Wg`0*0kbRU+Q{A{OXIjFE$Iu zuQgWBi}$N9=1iz*!mqxV6C0A4S)J#yd50_WH5H~vz&SSK6)~qTOp!o6g8d&&c}2`C z*OFM!xi#Y*G0jN|Nv!(0HRBaA_XU!eesul+NX#o@PDPj^zJQ?Mb7{xBD==pwq%VQh zL(XN(@YnsW@*3Ag())J zw&Kscq}Wy}_p-`sUiU|MMf~diNUzAbAIHpyrP{>K`JiNqqueDhHd5C z*H}ovINM6)l&iev^(E6Q;>Q{b3COaoocn?a3CQ+}__1I@0>)RD!+5|s--}fX44U8- zIrm2w=0wuO>T($OtCbwDh+nNtsxC)74fT;Db?kHqF=4tYl`^uT+EEvRIi9% ziB0p0__4+UgYK*D=V3fB$h`Js_DVl?vB04FZ7b)#ivUS&V8>840_Nj;>TVY81#@Wa_)!mz@R*v*ts9Z1A}H&5A}B? zKWvJa$1s(LzshUgygX9f?D~EbF-Mr$UJ<|6*c{u6KWl8RZKcZWE8pPtWu8~WuQir$ zTk&VX%=e1;wO|(5BK|CxM}xfw@aH~a0l|;iB9#ZG%4=rC0)ih8_8!3d)5=0yq{@0L z-{7^fC|DMl9}leqg3V_a_&2FK=4YN*tsA11A?CmuHn~_->l>!Q^cPIV~VT_ zuHn}jGeuT=Mf_T0&)Zh~Sz~K#E0vd0mDkLR0s+Bmy&`_Cu@`JB=YHf52wvwE@oT{p z+amrfnDrrkp6v+ugU*z@`vCkNhD4n@thF&h~@^ zykuLca*0&F!5oxA0!l*sJlhizu*EAPM~rjXyjHf_R?a2f#CSzs_KNtil0yPs3Goi& z=iG{UCjP2d#E%_0B;YmM%DL~zApzTLE9ab;nU_+ph+o}*-7Dh9okd8%8#b|X-}gfT zwtGeV*!M#M-n2!|eculWc*`bs?spa;wcoDk-{B&lTJ3jC5x;iiYPHR8towCx*tD|K z6!Ei_T{ZnXT$omN+al+_#;VocV~Y55gfXqWThqV8g(C(y;ZlXtC>1A+5hkJ|9rNTsaxMV-*e7A_ffa1@2#R(d7e@14@V*UzhV@UW53oM zvpwYuto#?F5Zb<4^@5fc+x-|=`Hkk7{q91o+RrG2?n15ltwyomU8q$rYL40OF4U@* z#t>U&h3j`?Xzc~AFTV#0X*gQpdU*`3iGh_@7=_TpDqIINEA}gYh3i#DA=Kmw*K1?Q zSL8o13h9dcx@N_8O@@g5QL{qH{u_)!%Kn>-LTHs0uD3MD>^HFr*Fi=hG_eZTpEQd7 zCRX7(q&a54iB-7%Tt$9#^WPf9ez~}Of2krry7{X{p;&pligrbYd$D&k3dPF1RpduE ze*+5X5wy$q9-|PhVlLm`8HG^!UB36Lh;85HJIpAAw(s&C(X7~S`!3&6%?hPljxh=; z`yVh0q3yeT$2G_7w|$rILq;LAeV6Yejbgv;yL>~MWA@v=3&$=nw6<9+SW#FVhH)~9 zf{%KL6quq8ERq#yDexGIM1gsOq{mQ@eFzy?vEM3z0u>S>M{*2qUVvg}Vm>btrXMKw zD?bonx;;>A4q&y?hxIQ&AtA4R zzaIn5eEo~fkg;xsuYa*w{44|7`WMnHHEsQi{eBGcqOE@!Zb^m+Cv!|&|KhR9VdbZ- ze{tJ7=^EY@z|T+z$n`K7t)d$ZT$MYHX9{sSCq5Zw0RPx7N*Us zwB8byW<$hmTft0E2MWOoQqEy>;7L|y(5ITuWHY*Lc4JzQKSrNxeJ-1yOtNwweHL^b zvqHKg)iWz3N&}lZOUg?lqmZuqK}I39msyNryTV|5nawDq>;4=@Aw>*U%tPxWUH30w z6n1q&KZn^^+rN-eNZ0+jGzyl+JVvp3-O~mx7cmOyx_>dFkgof%{sqEd^BS%>2J2sd zV)N>%l^?8s!J@R8e^%tM{skzc>prZ1VOH$rhSfz_{{j@1auJ91FG#U{V+ExTFBLqA zax((+V4K^V>Ci4+L(8b-0-kip7TjADNdJe12?Hl^8i zQQ~ydb!>hziE=eeHYPP>x98(*va#)QfgaDZo>2%D#_hR=W@VJBdah*@+jR^npP*4N z$PsOJy8VXi_H1DDVC|1CAYxHQv0s!xX=8aIQDQ_Zko|TV1%n)?QLw@!7{&g81SlPh zLaJk(jAFaOpkql!v0eEw`|u@3(&z%LY$Q^kT;MzQq|pUf>1Gt$of76H#b(>uuVXNM zF3qOSk|;ee50=y^xqR2Nd9b#NvO-mT8Ah>Plt{_aC^$(kM{^A4C+8W3P?KH0O^gE7 z!0zb6<=f1rXc9Ulmk+*819i;)O(JA}3vz4H%!+*qMC?;E3Kr!JGzu2wjf_I* zlw7_~GYY9FZ(MJw~2KjDAv0cZI@>ND5Tr1V8uW3`x zhIuR~PQyae(7}EmCL9v_G3=9nz$mth5*_<@Mj=!fpX-M-3SM9CV-(vp87V)a zQ7|w6!6>%-F^t%c*}Ojc z@-G>M(8IWV&oc_4hf#gMf;Z}r+P=^AYeumhWbDWOi%|$ccDr7nQSf5%8=7NyMc&US zggWMP{g%BRhtOVpt`}((jMz&w3TFRzj6%xG?-|8*QKFTX8HH4ouP}=J_5$T{fKdpQ z-{*RjQ3#da?Rt&9y2N%-;;#vRU=-UC^QkV+>x^PMVo3QT%?kd=^#-HZE`6lD$zJzi zKl?y=i$=k`9Hdb&$bVuKQeF-*itTbiD}QDbQn~y$qu8#=Xyq?N3IzGDjAFa;qm{QA z#dhV#a(Rcny}^Fz!?p5VMzI}ayuAL6QEUepa^QQ9MnNlor#Xf{*}TsvggOT6U)W0$ z>_-f&9HCJ#FGpzt7hf zcI8LMU|9k#Egv;*Le1%Co+BOumfKh2L>-k;+!bT|6DFND^{in?@SMlza^cJ_*Qg1n z4v;D_$N)Z6Ec`S z;d71RGrI_R8BL^sl`)J$$_sp77k+!4U?(F`0oYu)vD(xoZ$-J9ScJ1T=#FC)JGB_O zFh+8_{ET9|T2{E+u4+aZKjCa!xdCCHYdp;g7UfBdV!u^_l?gNoW`821;H1tmu-<66 z&4-ke8O27kXWG0-IfYT|*JQ}cB$^crat))59p^v&jHzc&AFgmlV^L0K6x%f!^KvSU zf{vZWD6AVFGuA(T!pV~+pLY7xX=hniAU{&3FpANQj~-J68LJ+D(u9d8pE9Xt@~Njy zfm{Zroq1L*WOW8QcDnWwQTyGv+XG+ihMwPc_Hl4EReOo3O)KzQmD>|w6q1!`NTFOT z+@3SpR6s&|aeK}pQXnt2j6%xG*=%B){mKtkrt^7yw!3k+=NuvhtiU(P;c*8kFEiPk zE8E?;7lzg!(RHQ3&0*+fz@of|b94QS6sK zWWSM7Y{l9fx4 zLh1Qkz9u%`(smug+qV#r0ufupD5Shx$|q0SjTkuAOr(Hgiy4LF*b+8N&2~4Av(zrr zrq9{$#$CQJqu3f)!cftTx1ueKV!P)@$1c~b*uAfWC;YxE7=_UDyL_!QD|qw1lu-yh zzst9bQEd18nEmB63RZsj7Bh58wtIf0TuGy#V=Ebj)GAleC}?FhquB2GvGmtyd9mB` zqm`>@6pYwfMj?#(UA}dU0%ZP~$YIC)s_$y;C89P*M~eME8LeEy z-w0~6>qE-5eC{ZL@(D(<-Sy#5HW4;?(stK}KR<0?6lgEQ-5#^^(2x0CQAV-dkD-+| zMzKADt%SSR7^B$k$I!8MniVXUIHTC^$IwcGQEc~PnEehK1+8>4itT<3tt1)6cBh1t z>u3~oY@_Cw-5v(5bTNwUehf>$n`Q+aOEHS=P6;V#MzP%~VP1N0va!o{kZ~&D^^9V> zA>*vh49-ucS;;aA$x4nd{y&l@M?<*P&rkAHhzOGH2 zwtJg^73Ld^V*C1nRt6Zw_Von^iuW=K;lfwp`X(MzMXdz@mipFZk%j?!^KfgY_>I3OWYsUuaLQ zD{%b_P;7VO=-3bVE0^uIeYh9>cSfcR_sJMBSpNbP z+Z`-sAJ)GB#rDMlvk&WEC=_fju>J)owwoAQf%PvG3T7YHzW~K{H;z_d{R>cR*JO+s ztbd_UF#E9n1t^5kxQnlU0kZu^&`*0RD6e$OZb$K0Nmy_K|9>Gr(BC?qQfyp^<8>Gr(JC?qS|`WHe`vh^=eVQjZb zzWxO$w%ZF|{{j?3t7Pk6C{|q1-D~S#Y`02uOk4j#Xq9fh{>8Qx7fhki*1y;;7j#Ul zf3e-ciuEs~3Zt!mA+$+YQhNc4w*H0CD)sd*c4w;KXk1(WLTE2y{R@dA*1y2p|=+WHqlr-a{sxy*edKD>Z`8`y_Bv}1hxO<*Oy zGgmvtSKF+B&r-PI7+(S|%x69RVZH2l%N(;^OGNf?vV1hlWKXlWHZXHxtSLye-^f9!K7 z;y@jT=kyJtE4&808tzY+9_HtGJc13B!gdlr(trt?0d@wz^#SIz6Y%$Bexw1X=#nTh ziJcR|HJT(poXjQR5dJ?^NV3DzbV)p%0!Mm=l+!gH2Zn~gjJ{1ZyarwXW{(;9n}$cQ zfkxQQ(!b^`vM&5tx-x-N+#=dg1^c!nm)4`*^oIE4Q{CM4P6xw<4C zo(D%p{^~TIW&RoruYuPHbNvjjgLtGl34dqtBMq3XxTXBf!6RMre14<>7wD2Gav?h> zgy(9K{BRzZghTlMA|c5RFV-dTu(*s)baaW~HPZ^c$Oi0He&%s~UMV z(3vh1x*Qz#EOi^Gdp#h`z*xn*0n)yW@CP^dCn~DlYYkVg*240AIPLzp%fQ!bp?C`M zYbqJeWUj4JeD`x*uF1Z~cv79gvR2{p{aTzn)%S`x`7!OJhh^b7pq>q~vz1V`%-JTz zI~LMx!Pq$W24-~$0PZ%;OIDCE$;)=F@M0*F@F>13A%UBBvhNz6RL^0?y)GldqqPWc z2MN!2Wkcf28*?cAJ9B^x#&Yj#7TE8d%lrXu*Kp)1+e5ba6Y7mnvT z}rK+2^Pcv+49dLVmlYKJUbU-s~cDLmdG;=hDWGUX=lTMc(B3QPP zZYs&Jmr26#rrdbM(in{)S&HR}hA0Hh4j*cWYixT@H0t~cO=Oq%pdl8Gb|;_`+RwjL zMjWWI^eGwLM5xRrPiSOo`|Uj=uumde+8^=Ijjo{BkG6caA)4<^b|s^kE%Z9!kY4Ho zR&ZzLX-sR&^dXO^iWmU&fUcp8CwP0;aD7{MH03-T4NjD3{@~>)zA2u{kuPd=mSi#4 zNw-Jj7}id7Uut=oArTBaFdTy0aMA^hNHJ`6!tFcF6pdk6$|bw0xgt_DTXG9aWV^cA z;{kgQ2Sz|GW4mEQ=1J^w9u*0^9PkU?jlub5fRB7r>chY4W5Kx2SFM& zly}dGHk%&8Q+h{Dsx*e&NvcAdeiBDT!^V=RPxBIsG#iiQGszs`M#&k=GA`Fgo&V}U z;+C`C09qo^cIP+Dz^Cgd>kZU7_@Dm9Yj{8o@Lr3Z~ zAF(b%(`D|E+P!0S>0-W_eAwIC5~I@8D{aLE?~DyKA`w00`z zlg6~ROlY2F(*$a%?apKtp0va41bXj+MeKlH>O-=mZ+Q|?IGoBr(vhFi#>oF!G>re(gVGilMB2P9a*@&B4UAT++bX&QOnpS-m#ZBK;)NtK^w)&_GwIO%Y;F!*))M##x^l_B@Phz<-Bn6i!RoEjQ^|= z{Gy9G;=#toM*F>s90DS>H1|vaF@_}$5cw8fq#Rya;uNB#U83(rc~3=&?D8HoKu#j< z@r1*X2(Xze4%Arr6wf&vp2N6`LM>yP7}er30SAbDYcCS<5yXH*wzBW^{wSWJFs&^U z!&e;sIcS&>{1UpVcDC*mQSRXu}#c@oPXv3k#FHeDm&ZRaHNyOEVZ1R)9A3;(U{hjiGh;? zkLHPV3m+U!f5#EzNanr^zWC8wThvI?SQHA##Yl8n#3kmmQc#GNc8O(L6o=S9phkcW zJ{Muc#WFHg7SSQCcPNSsiD_ZE!(soNq!2Cbj-)8FH$-ZwZBVi) z>#!4`axJVU9R8A#q7W_YI{x`6MPgc8CRP}^&Y^iC-NJ`_mxFZ$Slv=2W~pWR+!;CZ zbar_Uh(WY+gQ%jMFOj&zHlT%rL@)KB$LYfX64BBwF@ACpfN>(b)Pw8elvh#6)@jUA z%e1*$vSk{x)H2Mgbau%l5iRVd6FJA@tt^$S*~ecSdy+kISY1Q7>2b!AEW)ZS`ypo5 zNDRYLF51>b%ovek*y`%(re%smFziHQgbNb}k3`Vy$n7Z?b=dckh(`W8vV)NaY;7od)fb zh^2Pv^L*uMKxY?wz!$Q$#k!qL32?@?^Z?%w6uB;Ae;_5IzUMBEs4PJxc z3g*1UfI}nDHk^m-%{;_8o8}TVJanSX(nGAp5m-^}IBawUC-h^)eS#@w!o3mewd1wi z$VMDc?y)nSRBs)02`3J;?6w2tW&NKu;>t?YaAHqLQ&24;#+)H38OEQYpRI|PsIvZz zL@C){2epOZxC8B$IY=dQnY8l}1(j~?1L+4AQ;kPky(|=+y`9N1-83&=JxW{z% ze(>U#d5=IN!BgSC<4cB6Q0%Ti?W?upvo`Xe>n>CD+-0X)?RYGfp#P(NcCOcs*Z55J zAMLR-otECRbyj)&!h!AOS*9A`K!fH94)inebOxSP+c)lrWSMj7qc&5vsq_>0z}pVL z_aQ#Av~+7k8cm*xcjSzq5<6Ehj4$*TFY4hk`$Sh&>{}+@5$}cj!g&rRzB}P+*0tsU zmdS6OU^Ypt;{0xcL1{zM$xq94rnP0_4~!Uxjt<3;94%wo$EbD;JBc)3}z_;ZcYE3x>%$iCfOP7@ui_Oz~)9BtDH)V>wTq7ZU`EKrU;)G-Jg3 z_R{j3HDaBX-exyDE;B?frX%Nfq%slGYEM!3MylsTUUlW- z{|KkZYRdT36%Eenb?}Tz4-r*C89!)`no0_aMla(-E}v;jM<`9c#1Fa(%@?Tp_OB2m zVO@ViDovT6ij9%RFf4UsqCLcq91tmnt)BLLH(|~lW{XHMY_(CoL4%e^1j9}bywr#K zg(WJ-u$Ca!y#^A&u#=(MArTBa$sW>gl~_(hiealKy_x!iiAXVQ!L!6Rsxd0Zu!is6 zO2xLoJ2`WN7hhm7oiPo|@X~Mk$LYuxo@be+Q0FT}R zoiPo|Ftd=p$YD5=_)c+G5QbPd6DQly-IeZW$foldTnrBPC)r&4f{s)^7!1^{jpCBB zwW)MndmP?_9)m!%LlVBM3^9QPv(P6c+M~H>9rX3$IFV1Ww1mOC+7c^TF4grV;iZDf zSTa|q%St)}bs)YRrnh#-x?!x;wE&EDfM?zC0cKbzlTF6zdNS$mbPlm-Cf2ziyKzfb zbYr|Ox~cd4AUx7QfAgt4eD_&5pn(<|P&S^)U?px2ENxwWS!D6D(4yAG&3L?SWoTJs zd1U39$f7kZtpKgjpjDxzD_R$aR;)1a70X*&Ba0U;S`%5mWJ&At5D2FOtSsx&nS4XK z?Yaibk1>hz(7ziEA9ikFUy{yuMcBfQY<=41C#Nl_P@IWPP+rNl1*@)F+6qUV@nkBU z&(=W+*Ts9`>XOBBR2(}Ovqx1rFjFfs(O73QRG8Jc$|aJ`w_OlPw6`lgh+oRSTHMm! ztK`9{jugC5FxDB(D3M4W3T|#Br-(gN#b`GuSkj%z!RgS-m7%L6t6Dz3II{Zc6^kPg zrB~UaWV_P2Wf{I(mhV=e3B$DQRL80<-AXExPB3R$Qma5tNylQ*EQ>^o<|ISg^IA1m zdZ8jPam`2O{i<9hAIp``R}S)JmFe#8%>vhQkw|A+SB8|Xm7&&n%E)`R6IKxM%m**v zxo3$4NT>3KBt(bH&7Q^OSR%DDdTEd0`wAX4Fm?jp*)450s0j0*oEa5+c=cj;oP{%y z!X2xtNMdCe(LN=u)m$x`t+}|cyd<6Jj^>oru^wf0Hh#Ub?2|DwUlc6_1w^?XrDcSl zZ@&w^P47{@0Do0g{b1Z!+^Kj3|2O2b8S&Fl1ALM>a>1NB_UR^UA`Q@qXBB8zijv#X z6VKLnA_sa%2uB@O$CQS!DDVg*Isk*O*qd5$3^C3$h~Pxo?G-rVQQjG{5^yV{tYF2h zRF%Q~CHP~2j0c9k&DK(1XShd)6^^6D@rt(uuY{0{SA06YkEd!GUZLY#xv3?9j8`gk zd_GSJ4Wr>0Vx?~)M~F+_D%D&<;H~`l6cb+eDGfMP!lm3PXGl2e@8t4lnefkXyn*A8 zJvkc6GL!rjH)z1sCj5I`PuzsR$non<_y-)n(S(1<@q!5-;`oK;Xma1Z#Ut;<@lW@ z{P!Hc*MzIw?vG6PJ}&>T34em)yG{5`jz4R{k8u3ACj7rSe!zqu;P{&+{7mlWdmP7| z+?$Q#jbD^kg3F&`!bLke(}asS*PHOGxSoqlc!c9unDAvBzsiI+bNpHpzL4WRCj1tT z-^g*yFXl~bcbVk>nadBDaFMU?nee;0{QV~U>m1*0!oS7w=S;Y$Z%Tb8jidVda>JMU z_IO*qBNAtJS#n*j2WMcYt<-0?bhCYN_KQYoC$b=hPNH0$ z?%xKYe4P_|woca?OcQT60yiBhczr@l?gLS_3IAAZ^0g38KLr1f&#MPQY-{3sF&+?y z;yNsj@w#Kl=i`Xs_{g>7C%6TnhaZ~lBiWLFw?^2%g>b^k z{vBV}81n^@@6Gn7alT1R`8nqgm`~ zXp*<{At3sV{g}8G)^N#dVULoH{8;QR`=*w9n)g2f7xu;ed^lmnA3s%-2nizJ3!d0- z;e3;rvXb-7xZnvK$5Unu&k6q5gdpFWWsd-E3Ne#>o7>0nGH$rTP@3b{F#CdlyfsP( zT3Y*i!JIkl%mu-Dv*xnYhS4`IZe8M14Ubf1p=DlX{1H9SwkEb~f@Y~I;ePMYp`oF$ z81pG%byw5YA@Al>n*2MT3}e^8wy^q3|NWlO?iB$4Cj6)YKNo()IC!?@0dWu1@$M8+<7^c7NL3&Fj18%i4s{G?ZsMWl;Y3b3 zG;KJM8vp$@&HnqJIYBk~Dfr7aR!L69N+OW|-Tyy}Kg!zrg_f~E!cNSvzna{dT{WZQA+56K@fZppUE7W3IaVx z`#)N6{fm8`?8ie7e(i}fK;VEcqdtg31*mV$GY5muAAYB>yIFmvFr`+mHLu8>%gZf# z=i6L(o>iRLh5gvyt`B`;cQH-shMEg61P4Py6UQ8S-m3pMy3z0skLtf)>Gy2yZ&pS> z{#xkpAnX5it6}xog6GRpMYYmrzLGq>!*h$E6y6T^k7ZXNS*L&J)AFU~-5ph*DLj4n zMgLSq-CKA;-P3!-KXn_c6EpYD+nYTmv_U^?aXl*>DZFb$4O|XGhQhlJc;FI|c+#^% zRSZ5;D*f>cvxU}%t_rOQtzIQAXg?F=7WIix;drQU*a&B<`qmZw^S=|`^(L5pvIuWU zzPA;gd%;EQivB5&hIjqJ^Td(0gHIeE-#oi9v8YgW6H5l*uV=P#MOmsIY)L+@OjeW@ zb(e81U8?>GE~l-9BalfiX7=%2H;mt=ZUxsc)vRvNc1_wYfIE+hf48}GA(tlPYHIDD za|RQ1X@aip&-=GcgaPCBr~KP;un!fUX-WQE`60M3UC#fjMg2uf^0^HlaC!g4nc=?2 z#)4DmXW!u1;NYP%{8O8OyT{{G!$X5`dK{dnZke~+zilci_3!NcTi=i?H+K6_eqQkX z2jMcK9J=VIxC=fNe81`TPyP*M-hP(3G@rWkhbiW#WNuuO_ z0jl$}faMz6jcS0Gn}ygX_AL54$KD5Bb%(A=z*aBx0Ye?y!x{N!(eU4yVGzy*QNgu) z7QN3E90mpF9a>+^|2yZS_UDlQKI4O|&OglgN38hob3Q6({KJe7vO50==O4A=ALe{i z&iF?dA7pj@QO-YR#XrLNsGRYSGCs)a{9~N|fffHK=c97QKgReVtMfnL{Nq;qW1Nr5 z8UF*u2U(qeobx}l;(x&TsGRYSGd{@b{0}+*BP;%K&PU~p{~_aptj_<4^M|bXA96k_ zXZ(*CA7pj@kj9^@)8+d25$B_F#vejH$ZGV3dtAUS93J(Gf7`(Ep`ks>~XY4mlY@)7%>);6bUp#Pce=6rqgbG!m?eF`yT>>ZIV9uh0 z=R@l9{wX&Z9UF8T)y-Z7dygfJ>@Vv=eAsDWccEXCT2&Zr?rKR6VRsQ$pEFcEgvcXq zX!TDV*&G^L?Nt&_x>Y4OxIT1E=-SXHLJ`1?{u>8kC*$?R=pSMj{Ll*-5Q}fJy&GYtUkKh;}_I{BL=*s^|>&k!Q zzklN9#P;VO#m>gR_?Z9xp}P+cwZ*h^9aZxaT9S`p4{rqPPz`i{{+)Yvmz-%)pMnlHyz4bD z=!_Ah?dfB*Y; zAO0u|@rgYZE<6VQdcrdw!~dllxV_=zVOB}hJuS&WtzNtxR`)@))ZNNk?)TJV3O-nP z%e{Ez%H=CB3Y?t{EX}V!yZzcgG8=#=i-Aqiu4Mapfowd7KLZDH=|JOX?N_=)HqsG? zUmJ7D2>dh`&w!+&Yq=%PMDQ>6!vSUb!f%DQ$u+kW9fB3t=ioE)avKtuPZUk%?!n&*Lnyz}fAiH7l30 zQ{dC}nuE>pu3U6UM_0Nn+NB{&(uo993z?IWD?=-nT)M0{53y)hB$bI~60wv56>pBR zT)9r!uH38aSHv$dSd+#mHOh2&h7f|^!SMXI0Q;@-cV#>@f-%ZTaCRy`zZ}kNgkR`y zgZ(09n}W|n0wT2nK=VI<#D=H-cl+N6{J)9-TuIm_>`&y0OZZ+@)`(=1LmuUC>KgMi zTg9wMJOsptx45~K;DAVHGzhT90g?V^9SaVK^!IeEaX_ShrDMSXk>0OkjRWFgBtG=U z4eg5bG#zUk5b1e3790@ig*w(aAkq;X3l4~MyN)#ui1csW9=q>t-Z7a11$Y#b2vQq(`J@1^z5s*YLJC#$++RZpzygjM-lm9RXH>ci1^pxuopIria31Q}cKHFk4$t^tgSY9IiA9{JL zdYC5)elv}s#XOgb_1vzy znkRes9@U8SjXD+_5b3)Nsz{1q8&XC3Rd~XKo2snR62@P1+Yn9(PoVyaq%ew_MOs(| zF_9ETWd}s4K+G_$rG|H4rEs7_k3i#qNQ>y;C|jh3bJmWo6psFzq)s?(I67?C=;Ar~ zGvA{%k^XOvsmcnGoGe-6XZ4*q2BN=A>uT1B)A0R{ zaHm#RG;9|uD6i|3l_L2DhtT%Q0de$^At;ivlf(BN!s4mAqIDuED;mB_5Q?PS2D#45 zb=|{W@^*01f7L0&#!US5`Jzr)A)+Jdl~kWZj|C8y*LUSAf~YZYz0+lRq8tStP_Ydf zu1Mk(58VF8>&_Q6JJ4&b6iM0kh^mCF=>O{~ai^ZIk}9E&SI-`I^QLhVyzX(;lTI5q zUR^T@?oQ??EfX#pbMY8g4a{Ry)s_hm{b_(*I0oiB)hh0B3&)Isqz{v0#w>(n#dJ6g z6QMZMi_B4T;IyG=^eG_X9*272d7^PnQK~#(0ySyp#?AoV6u+X3s|Wv1@-@}mwP>Q$iva~ptgP4!B=!0Bpm0tRN?n5(^O;p{X&3;vlCfX9LegM+iiir{6_E1aHL6ZqG2v5vc&@U-bsg-AL^lDzL?VWx}Y{%p1oYDWLD*~ zqd=K*K5`aH3PS*}toW4Ct&qmeJ$dw6o^;J%!>|e$V`q_lo)z28bd1&J$bS{Z&bJbC zF)@!OwhP5FlGrZ*5Weh(H1p-u(SP7c*T*zpJXqSw-;teiSHPfwaVpv08CuzSB$+gG z9VgnWosuy<*1j-3K4>o ztr`O~or8}tIOk5xfWf)5ScTQ$c-_F4QP?=V3sqIC;_4|U;a3>G9e_PIJzhmVbVAw& zeI_1H)Q=~cjwjeUu2$Cz4N}r@UWZ_@k+|;mtQUzDyN{moe=|9JFJ@5xiI8q&4bV&}WFQ zF;VHqdn=%`XU?ftGi5dpjAB~LXyuRBna*1uv&T!SrmI|fih3=NqjI{sTAh8mdZoMi z09+u>Kv)g2;HXpi0ahlF#;A!jE9KE`ST3-6PaWOOldhSprF%VkWyJw8kNiuf$iHNY zeChe(k}5rqei%{vJ<~tjaR6(X*cL)UeMKFwS2(Hi;<$}_e$3?gF_Y(|=ZifrJzwnk zai+i2vyX~AoAwK+XlJ79)t*&u_NeC_Ks>A63Oo1^57xNHDMo)Nr?F-J|7?SI6~J%( z_@b=#K+6c15eMq(aC$)bH~E#U=8yIy%f6|iL^z)7jAu^tVU!XEEKElAbuE_5_cteD zfmJ-4jkNc)Z;V9Y+p76wS9=40T~=AYN@!$4k(~zqfeB}Cd51-1=~M%WTh4m%OC?A2 zvSaSkNHsD~ZI^>>L0-<rsgBhN5x|Ydx{@{aH!Bfh9~L7|h<6AU|W35nyY zvbJCcLVjl!hIM2bEIhHFjUw~*X@*VhnRD;do=_zJE=dZ`cC zJnT0~Q4r$ep!S*8mgz$tvj=nyWjw*#yN2uAx}z!knJRI{i4x5p?CjW^!pRpkI!m&c z>!jNwatv!Hx-Yf7rjZDS9T*PLU$07{7`8g2S>g+lX$-?sE(r?=?AJ}KP(+GmORm(3 zY*#mXJYetPzzC>iY?Hp0SYn>UF6RO36X@McsWT20mGi3y-t8A93=&HnqG~AhB#H0m zw_hh^7l>5NHX9N~HO7EyimBx@eNmXdmPvSso*jN(vXjgm8# zWn8Y0I{D7L_NxPlTh4j|Xo*DIo!_tnpRS{BZzTddzzU-E=N)Ct)I0^QmN`g1+A z8*~lUp3t7Lo4ug1tvz6GP<37&M7rh!yKdu~TkYF*Kq<~|dv_GR$=gdXDWXkh8o2~6 z`C>rjl;)GxPUU>knAVmF&C_g}KrOZ1naskIc9@-DzgEfi9nedCNVfM9KC2^}r!g%o zr=5&ov2G_x%u>truYSt;rn8GZfE&SvXd==By@`_xyhFN$4;cqt3$sokTG-9O#I;<~ z!2?`ooXocHU=!hsexm4^aSGAGZf{2$;rmWSmTA;d+ij^{2ct>MG>vI(xgnQ`3!$zg>NL8ECX<4GrcFfs|> z8guYaT@RB39TwiCQ}BTr_>2~HG|t?hk~RBmAQ$U|S+=&VI-nS~l06al6cHhhXpKxN zjjgk>CI*(qw6IL;+~j^SMx&OoO}t|-ae&A#^@28vmF?4*)|Lr_ShHyYwTx|I>`ELU z^2>SQjg9tu7dZq(YH9A70%8nH93b*7yhu5`w8SYyOS?qh zi}Id|64~WFXn>qV+T#g_BN1RTR~)FZ@+qEkI6Q}O6@^;HHZiKjWdaTm`PN<};vHSeWMPXW7CWfy#{K=6=KM_rKWupm)BVRhZGzy9CV57skV}+Slkxmk`)N*o8 zqr+-PV_I7#22KtHOnfosI;zw_7iU3VxQ79l6Bhh6MmzdK^K_Ob& zC6;MX9Af`~8UZ@^T!ax9%g9t&M2EEAp(rvWriJAWhak6>CrAW+D%k;T3a^~sm@*WU_Xypb`MLAz0affX{3kQi_>O+syhXW*{rCnnDr(4u)yWQp>ctTXMc>%u>rRuhQ8imqfI%n@;2$kGHZ^vSuHD%gwsHWr{>F>_lUP3lkO>SSk@&<+9AD+4;?*D3PJaQMlbb&&1{Ioy4#)H<)asl z6qNdr%C*_QipwQIB9_{v&-0ay)7ixy@P%w`v2G_*0-UieJ%~l4-I41u^djIskohO_ zf3lDSOU`G|r_xAuYb1B)q0Bl&fPU&84>v6y_I zE3k}%P{aFp-eZ#9@mPwRU{gMjmwCCyuaFt#&*XuLSr< z`|Mn=9k213>Ob0JXF4st&EnFmd>7>% zn@T@{54^eadmrK>OG~##q|xN5ct_3%DzS4F!}v0SCm3d*=&Fi+%fvh4y>MSR&%wlZ zCtS_C)*Qex`K=SoCW%#?-%T*AY)Cr!X_?NnwoLqCL^Kp(o=CUwf%N-$k$Doc*s_x+ z2Ew)zu9fxnt~SET#bWC;uBCOjpRs?zFj*&Y%UKuWv&@#BT$(+ocXl_cl?UFRjZ|Yf zPn{PN-Za{ea#{PO86)1emzLkG5$m+{HoMt=c1=!Es8+VqJ?(@k5XHu6Tr2DJ-&%@2 zpz|%ga2);-M?aQ}r&Box4*~u$cRTog`L<}P9p<$-czo-Ot(5?d9@^SSg8&DV;?mar z#kWjH&hJQNBBa%xqVA1U&xyS1%EkW?PLb7=@u@2soYm`~dg>vfDk$Rz?NL)nLDA@C ze8}Z9ZRrT5$(Q&+SE2a=Rp0&lu5#jw@Wp6@2i zxx;J`DTb{!$~S1x5{Y2g>4BH}P+q0OGDYMV))K_J*FYi|b~02uB!Xcl*+crR5`#yi z7`A%So2gHjh!n#XJWFh&8l!RyYxwT1RBQ{plQTzn@dXCc8Pl-r=;L%`l40+B*A^U>!t`VJ)5@zK4rMFzmD^vpMJ*^0_qe*{&m^VK}UDqCm_n^lh5bcnJFDpY#V683mNs0DoE?NhDy*N(fQ!FiE z@UFJRik3@teMxw!U^14>)#f7FixyxhAq`O-n04Ycyz8Xz7a9#i11|41C4%*4D`4MT^!%mM>Y- zx;zBJ=>RLsx^yPrkZ!xK!SZ8FqC9#t(G;5)1s`^9zyo~8U3WYJjVvF_)u*jru5FVI zg__s|rIu`4uq8Z>gnvuAO|EFp;bt_U`LCD8@% z)790rb5uy7R;E7J-X7^nr+ais4c*ccH%#)(V;<&mlem|4f&T0kP-*Bv3*d_hW!eF2 zi{#J*tE)?zo3+GhOh7GKf|aN_-_sTEU5!%05F>XbyOTLZivs**c^CT?5cQUJCABKi z(%!2;)C995o{Qvi$p{E)B_*FgPcv;vB9&U2S6Gu*z}=OLvaI67Gim4sw0ZbVL`WbW4rB=7MLtRg%+m)UyD!MeCN+dg=h*;iO z@xrGnpituNTKrfjv~PPWNst51vV1q1zbqfkv;&X3q9wo$Ou!!|brs~{Iwcd&VUD}H zuo^HGxM#++y0H}effPr;6%mO%50OV2&G0saLpg`ef%`ke{P zYMeE@zOlYBFhiv3Au%gBt1&oJfo&rGfldA7N=5ChR;N@|RNkQ~$`ruxpV*Qjas9aJ z&EqPS^Wb>Cz+hkJ<_Dp1)qO6vPaRhYDR-?4WO17V|GHR8`*T2~7mce9jjIWb3-q}^ z=W_i7lhuom9AFaY!*_%%?3YMsOyc>+C5&ZCI>z&_OUIWT?gN^O@&fpX*~MyF4am zzu;26HKQxP<(*#nN$)w8N4#gat14gcp5se+FHCs7zJ-v-#);n1?%r>>YE9h#1a2(` zX0EUDB=3Tp*SpR;4N_j;f|8&-46;=y>-AO6FFCsl&Ym*5@;0ycFWw0dHE#lT-vZgo zeX~l0p9NtrsA~0I=&Q_mRbNMm$bT^r2;@VZm7Ba5RPOg)_*L%(*Lc1E=Do-@>txs2 z6TIHa9`8lVyr(_`!KwG2?Q{DRS}NgP>~l|X%~!o=yW7_R_JX&@*Nq`PenaK!-WvBd z_vPMczAt*$H+XB7nDF(!-+ODX0HNM`?|Lce9s{0E!xOoB?=-j>;B12-|$}K9{YmV4;AZT*MgG)dsSKI@|)Vm zOKz;u?n9r(wtU=MU3rCf!o^Ub*FnX;74`}50-yUUYQ1;9uX3+9dAWD~E#7$vuiv-8 zJ02SxR?2a{S>BJ`>#g&B0|;(E=O#cv!) zDYr6SI?|GtvpAfk<6HI14CFxZviP=p)hCBYzHD?mC&s&5nSP_a9N>yNn7q+m#JKf7s6STv7czOH zy@;HDhT%qg5#!e|=s8JhFJj#KSLTlx)hmh^uYMi$SlO*+dW?E2#-$q>Zq!>b9u+yo z8g~x-6UPBa<2D)oO=2nSkMIj|Lz|-DxEeQs*J+2!m3)saUZ#yq z+(mdAar`H?FY*LpM(?U9gJtj+B^>=1<@lxv@8ies@x9squ~06!ne9$5gD;hE+5c=A z{O&UNqh;_vmchqBxeGsKyTLN}+A{c!W$=5;;JeGCvMbW9k1km&N1Ot9G`2# zt2r*(snEZN<4q>{8jd%c@F^S*oA3a~TTQsQXBXuu?6Qo2>}r$zd0fvr6W+-2YfShY zj&CsGb2;8_!Y@JxVC&R&dOVxBe3uDt=6H_@4|6{00-gn&Vqd_&Sbn zGvU{8{B{$*f#aVw;W$ph?GA0H=eLu~-)X|TIQ|tA-ox>GOn8pt_nPotj(^95-@x(j znsB^+#0G317wYTdk>McaZXU{x*(_ z@zsa?SoGThzl`hsCO>Z;Up->dBl?$T%E*iR3G+B#+@YZU^EelG^8E##6I(ewV$6^J z%ktt*&1_f5nC0#04+v*qe-cld^`Fgg)F0q!+%4c~#Ha8y?l$o>;;2h({XBuVeAi#i z%Lj4!uKyJN*aC6m?ov@Mk#Jf5YK~((g78ml<>DrMM*Sj&$k~8@U_(5B3BKLI_lOHF zLcf!6Ilu2qxSU_AKk|KIfa}EFy*!Qn$Z@FTIEIxsEry8uR>XPJV)$gEa6p}3+(Uj%HU^n=TN`#ltWQA zO1S8YP|=fR@UwWsLp`$mm&)Lt(Wnid{T0h^Due%98T{Qc_-(wxne|ulpqTL=NjN?` z6$&{LxD4WF@igwlbq(WCBjLin&~q2pvx>_I{2q?Caa`!BCbME@*saeY5#((@rdu0cWAguEC(Oyjul|32=2og_a=qq4tCO!B|s@>iPh zpL1M{>xBNFaXey@Kfv*gl3lz8i0xLB{M%gqpCoxv2axjvle}_+rs+XR{xqQ+_RpK- z8@W6_m&Q%_e>TU(eTKkmIDW_^Kab;L{4V5MIPT{cGl4JX_^Bp5!tv=GM>7F*jBg>6 z{1z_1RFa<}gkhgC$$y*6i|2>JpSwA}%_P5r<2y|F_c(r+WLF+PJYbUF#pNHDmTypQf2) ze=m@5?8j<8t)0A-<5-TUUyO&AO1MW8Wq;S3^mK5$2?D(Vw;4pLZo3KkOfPc7MV!~h6V5LRE#l0AwTFY?}&(HIC#!dJY9M4F4#JvOR*=myi7cT!f z6E5_8P0}OA5~%0Ll03%Yb36_YoA6(Ae2=7u59Lse@@q-H7LFh0{=96$7jXPf5{`CH z=aud+5{`Oq;_?50;~0N2=7FR#inlWn&tG%>Crdc$k8%BzB^>n&f6kV0lz)`V&y;Z4 zpYtUgaaQUYs9OZA~jpG**j`Fo!{I|GNoa$Z?hT zPa+PNa@@~x6?9|073DGABtMbY+u0^u)Xz&ycr%y3!i0i%r zj`AzH{G$?%@_V@aZV5;Ek8}CwBpl`E^83tRNjS=jIKLv{DF3g#Uj0GBQGPMk|5ph| z`6s#lzezaCZ{YGn5{~l6xV)S9$D+Pn$K@w*Tm@MyFEQ4ymE=*+&0J4|Bron6;k2?q zl1G0O-Vd}$IO;VAzim;btiqr51uA8=d+4C5){|A-`ydhX9A(rd!S{H3iDF87nSn{Y9I=?)2(+uc`8_>=rN!1pz^Ea5=v|ZVXS$`JFA{a(=Ipa5=yGxpSyT&hIKden4E# zuTtM0Z_9T?qHS%N_$D}l^_2BuMUz+%CDyLh=U}y-QlE);MOji8#AR7RSgFSstHLTJ zD?zp>h^_q6mS0)uGDH-%%&RMsh-N{3ygLi4fi!~VGpsP{h-a^-Q4xW8quLDPyHvanO*)@}RHClYLI65@{=s<+W-SK`B}HR?jn3 zv~00H1?y7lFI%<-R?$Xd8Np~L0K+BzMqYHWcj&sw~*=uj)qu5`?DRZl$>G<>s6sRt{#k6hNed{L+s zSI(|lygITP*WX4!u~uPXSy=bU*610FJ!i>hXB$VwOF)CV6c`NF%Rdf68+5w83+jeeA5X-i{y3eIr7<;h&ZLUT%LK?^n@2c9~}TZvuw) zxfrCh?EsJaRy-+f=J>q^=dA4S`xz(kiv`-pA(z?yCqche{x|Uc{Qy@ZcIN!&foy4i zkH)xz6VX1pVzwUz%*uWfuTWxK#nqIQ|21&J%KipE;0SXf+Q;jo+5TL>tnA;x?a$9n4V;PgvClNye}Kmy)D&$;xP5u-i2`Q1Yk2vietGlo`{ngm zxY8yL#lD&I&3ZTRf?g(ZF=;OUnlkn8J}zjM7sq0cZlW)srf3`F0^&L&P70nl#^3ia zre^*DA=oY?wY`7^IuneakiS<*TJy(^kl#0)|I)fG^uX+YGuXF^pUD4KQ^A_~zk>6~ zH*XszXvkRXbfnEJ`z-LS+Q0I&MjGS=gY~l({+a7P>ND#^W;Y7M_9xRx)1i_Cz>Fbp z?R5ML&!dGw?XX0)9mrPx5B@?U%;fs;0_5&i}57Ao4HtK3b;!?SDm+c$*7i{IEy_UzFc>H2Yl2 z*!A*)`z9a9i8Cg5lz}q#_a4v~vVANgv;AYhhyP2qz)lT1fRzI_w2M{R%x8}V;DuuK z>4pGqjqI=XM@wseFPJljfx+1q1mUenux%K9)8f`8F4f49sw^xiAGF>0p&`?RfYPLV z93*c)SvtXR>pw!S`rKozH~31^VHVXjp|zo_R;>v4dyftc4YfQf*e&Xlp+^82>Km%` z-}Vx~g%1lKgp+?mMPXg6RUHaHAUF>-K`Jyfu_C;E(7)|p;9&cI`?uW#`v;GMrtm|M zVq19HZ*y&J?|wMrhQZ+bEj#8<3X74x^7vynUR~879q;;ddSXMO-amC4qcYaZZSVeZ zM$>Pf_~Wnl!@n1w_~@o7hr@k)JmGoIW?o(#d_O$zw|UQ@nZc*R$#f0?lCQkBC zZBoJo&(qiBRO)Cys31&HaQOL}n~T#>iz@-5Y*T z2!wZ3Rfc!W3vVCFjWy7riIu^@tC;2M?Xn2)6DxZ%lA75$e0q-U&&p{BLaTiIIZsb=k*+bC1Nb0@7ZiU*oAb`Q*zaBNRF_Ix-7UCW?yK!pl$ zB-}r7Wq8+Xqr>WB;a#tKAsXXfyL}R?-B1T?$sZudCz=bI0h|6Xc{HHOTXbjsoy!CB z-ud)6BgfFkLCd;pq8olxdfLD9dG+ae@0OllUaS66>P;Z~`gI|!J~{85uz%UHaN&ql znu@X}T=*lFA#YNz9|+(4XT0Evl9XH46Gzq#K5=~fw%U849K(ehYAadON`qJ79j&#{ z*@RT6fCUQg%-H4M`AgZGSB#c`*M~x`c5ZMGdiq5}6EAKpbk&BJ z;-zXi(+uq==a6(V)p4$z40r3p`7uXXR}-q2%c1Isbow>uCn>WYF3}-CP?cYn`;Zr< zP6)C&1M)Xf{!P%T|F{>N;r&O8K9Fotp9t%niQy%VQli+GV6SnL%Db3ms9btRmhNcx zN;NgHc;3Uc0jP8N<(K!*pK*EroO7EC$9P6B9a`;G5}`*_sQw^!CWz%OICQ-cuU7T1 zt?Hq0;pK<$*H2_I%E1?56at~uS@{LfUfxeEda^m!q{1M2kKvDGm9;NuzIw)>3kwac zK3%h3iw$G@UKiGDq03dOOV&JR2IS>IV8GR(jMnL>b=%D#!v{2;M}MHS)1y zBj;Hd@!2tgPn^pdsV_FtXknz%ju9xj@}K@2&;f5BVId3@GiP+2w6QgjIau5GE!m3NX3bauzGA5VHMD1WRx8vqfTUm)nmg5 ztAHjWW9%5gzPxO>SUon3unK50GS-d}{N19g5mt{4Bdh|NjQE)meJ~4sxY1{}7TRkA zErrM7I>7o)e0XkUtF`b3UbF+OTH}=)?|?!(w$)C=z5o7ae+qkL=I+N|iyb~X@0fr4 zSE0U#cHC40w}BtI{9oF&I5@a{Fyy~;S8%Xt8{AR;fSunw1@4Sr4y!N0Ky7Vp;RW?& z|F$o}8648qz^TK{l~4KahwGVt+vfmoDLlXU_PvYz_pfelLXqC^(6hJ?v=&~#D{tYQ z@UDY!uh?2Uqj0$I%_D_(`d+OF_eXqT7-r6G?ceN$15a!JT6b%I#D&+*#@7Dj>eBw( z9xF^z!b4BBJPf&D+fwzzVF?kBJ4pAR=vZ;r+XOMCoHnnKa`T`z{$7n$<(PllLgzVXa`PT`i#7CI{*G|pQJ?>|wVYGDvn&LUvoTG!C9}NvX-WEM9-QTfc z&0ikEC(l-u{{hfHR6Op($7)awYZpP4gX$K5x`X>h92M6{^{^VN;E}#JDq8!m^tJY1 z4;65WC)|HERKOOffKX9e`$H;J;}(4ov{XIRvg-iUx>vneBCNte9fHKewOb+JTIGXV zK2a}wm-gR<^*1$1nb{ba{X%=`Z?CW zkM#OC<;Sh+OGAGs3TbO?uQ^Ao{y}!3?_yO3Zp~V;$~+t1^%v;6aRLBquBH9Wwa|rq{;}j_#Tco#s2?s4z7!sM z2J2E7`YWt0qUu1XA!GoUAgm=wPGN$j6m{x5rP0w-5dwT<7~x9_AglgyHZ zEJT<9A%T!gHbN2-GFw6>Op?hg5Y|plPtQz~ndwe1GZR1vi!34tiU@)Nuc)Y?2&f2( zsHhS26*oXpUPM$tK1JmfUR3x$=TueS>YDCkZpZ)k`@Y|2L*~|bs?JhXr%o;RcHejY zGkg1{OaBi4I2&SGq8EJBLY(0MrMEE!{JhG%Jn}Z8%{vrScnygoSUIV|Gu~>r^o2LC zdK&?y<(kcK3=Bvl;1}quE!U*r7TwO4YZ?PB*PM~_iQI8wi~R%k3Ah@~Y7}E$EaDT- zuuq`BC&AWVBYyl3AELq!s${=aiLS}ZCx4LnmznwShZ`oTew}16le2_m=4Bx>^Qs#v zq|yo_tM#gpMb%{wpkBBKME>x-g8p#vVch2z3xBx&B&Mzx{&4X*B2W0k z^%pX=9sbY&e`tU|Y==K=hd(sH9~$5f+u;v2I5*e)f#O9s7+a#PUxYur{LZh9HYR__ zYeV*jrH{URK5pF582#V*QRkRB7dqhm9=`FWoqFge*qd;F=<2gxlU%mG_ zU*)fQ&|i7nC<=Wm*Q5uw2Zw3C%3r;Ar!V`j-b>HFD~k%9=i~m_NT=4qxMz3u^_M}( z(nqU4{#F{daA+z1*b5DBJbA^%7XZiog2{iq?$WPN+RFa-A6}lw#oxJjFEcIu@fFuo z*0*?>qcn>qDW?BaL;uC3zv|;}rq>)$`5Ql;E7V_QsKZ2%ZXX~=%sJZADK=jC|%!!t}7ng zEBcHwCR}~Ry+qOt3Ux0%9L zsnOlxOd_0&#(VIjeli&!>a)_R^oGc2bQ@kG63akiEj_xPOhuyoLVbEoZIWO%t#)^u z(o06?C2PCd*3|aIQ$$Cj^moC$o?~hwLo9^T^xlNpd1;Go{MYWLDurPmO5$xcBQlwc zQUU^(tQak~wk9&QF}xM1ufMi^N3Cdu@_CDwq%FMMad1ywZRo8!q6%mP%|XU0a8cw6LZwvFr2&l(N~z=_5(-*>wYzQ; z+1_8Xy7ZVNeU11#)<}Sr5uaxQrD0#NET_yd9Rz|DVM7yfwnbIE7NQxTK(9YWwHSEjFl+qni78*|_ zl^WQglDh291A4HMt!gn2N7*gScv4=ec~!bEH=@pxxw(tkOY}G#eduTL=|f^vI+hbd z5547mOfjkgOJylkKqWWipbnMXETQpvvXZUFBpO~NTXM3)DyhpJf5R(*a7dLrIVbxZ zmDFW#KVYXSL5gb}5qFx@IX|bnOC{-9Jo=2U%|u!6TQaB@-EE=ILUCb12d;!Hocqcn zVkaFv(?=K7e!$icJpY$iq&N0KwUI99pxQ_m^uN&}<&b@{`!KFmG9#h!Ii!jP^z{|` z)L6SQN87VgYNnoZo61@#N?<*(U8ZsuGwjTiIc@Sv(d$b%zNOD=@=BOMyuZcdoGgnF zk4jI^$r%Za$n+QF)wa%3Nu@Smjf7NMH$nX_&+)nEQx6!MRqb|YvH3?bt<>7qIpfo& zmT9?0DAoqLHayqHpATvlsI+Pq*BYt5A#|H+nrmd!NLZ0~ zOpK>0s#+tmDz+6?wflt!sidl0nKg2yt<_E$32v3#e1AoZJWm^lh*JCJC# zkW(vH3|^H~&Q0E`(pf1F#Z*!?0~J#pth((0zOTN=0BI`uhV%iFR>E*tE$veyXgmX3 z@tiJsiD#!wzgJ$do={1xzN=JyRm;QbRVux|KBsb0a_(X}s4}ZxmLRhV$<7IoiDGi} z>Xjnr_JC0EH+iKVI*@LYXPje`j;!hP9eJ&>(mW9)y@^0&(N}HggN>m`cz?}?P@z(- zFsVUR+FO5hsU+RmqYvsiQ>8B!5VUovLW#Z>zHIc&*oD*X$ORVBY9ms`ZD(w~$o zCj^hL$>fr1!3s#q$X$w6ahohbRV-vwPJm1llXKz(QGn#A^k~k)HkJIWgs7OZ`c3(e z7hx(rt5S$VtWwEiWaX&Xzs9QVrCYWAV60L;LN!t8n`M;(*3w)*{4j?tx$R|{o{^hf z&N*Ht2R-N`GO2zZ6!ZBz5;`I0{^#__U@rY<#L zF(_41wSNg?_g<+F(o|9nVX=x;lp4h-sFKR~A_H2DZ8b!MJVp5!<|>q{p-u13%LN*x zg+Ws|gSi%!3A15ekbR*BQt6U@B;&^&a;Cs?{Rx?@&xMig9Wtr(q108Agl#8J7FR$i znS9=ZUYAKVY{#)1P*KdYsBNr8ZDTEJQ!&i5sBNr8ZDTEJJ5XznZKLp5i^5|q3Xg50 z@K}q&V=X%1EHbu@#%a;mHu@J?G)p$3IxfMOJ6=MA@(SocEj@n>%K^`L*GraD#5;@fetioDZRIQJ=3W|v4D=W3<$`Y}yohm~mkGH5KX#{ z<=%z(h0|@S<#98pcd72kT;#Fio6jCEbwr)kOenf!D%y7~1T0-4YQiqGOcE~n({e>v z)(Y+xOlQY0hBHnntDpJd##zEM=FcJ@w5*k`6__C)^12gNSaT+Ou(Xa7n?Y zT=ki3p`i=qOl;06XYv#(O1fG#D_pW-%e$%S4pP@O165|(_?pR_$z(>C+1$B0o?4*xC@?-LYD`GkF)#`j74295fZeWRdQ`(5@; z8ue-WW{vuc{SiTZ6RqHU*1lCx4`5_FciVRfDvoWi^Evx&L9zDF+xH6Uy_9#a{h*e2 zpZ%zyK1F%=+m8wAexkl;&%Bsd&kKn9iv3K&7PnzKYd}9_Kd}0#1|4sYe4n6-d`?XFz|J(MGQ}z7s+R4-O{C)PlJ0yKM z^~dA(Yo|;4$E5$q_Un1{PwX4ckoj-X{QH!>3SYnG`ZE2rU9afpi2vs{eLb7=pFR@w zv-Ya9b^4cfy`uj?`On*%6g}xM(7(3(_sH^|?dletejW4|g!}=@|8LMI z+pPaGqW=c^SAu?k=r`=@iLVLzMWX-5rte>JdG@lmZ2Gn#)9lIru&3qG|Fowon#;d! z&&;FWvF9k7`RzchqW@0%0)ZnGU5}vRIDsQR@s_5~4IJ^$e`s`B;7CQ!q4t{)I7-nw zh`&6rDvz!R)GPWt%AXY2r06MF89S2$SAw?6)xktyX8ErXSLkCOjR8rqjhBIwf^Ukj zLm?yhKQbUO@s^B1O#IyrazJ9@A9fiNRQ2H7cE}^%u_t-r#4%Z%$LQ2S4kG0LjGNjxd3VdmN#aiO)HcSP>JScf^mQF>$Xm z&CB_MGt(pPbLM!&{Z6e%Jm835vED`&e9;lFc({g$FFE4opBQD1kS(5Oe9?`zaIoF52^Mqluo&XXGT zE$62i^_cUFMt$4)rAB?nd0tR#^>>{Y1;sVm=loVs+~YrVUe%~4oj(TPrIvL&)%{0K z;5Cs+p+5Ly=O2Qa3ItHrc9sb0ZK9q*>vG9* zC<^|x?^jNJvqwGW)ORz*-T%B(FQy2t#0yTdM*YUwC@5~i7oAOl z;->hW)2dOwceV(MhGy_3XRDxSq6xn2?A&XWuVa<)>)GX-WYRuX_;s-AOo;?LZFeWq z)ugb79IA$tS>@-;0`BZ`nhfY;AH&>kaEkL0K)jSFv#LHRvxA>-c=Qeg_h_T#e0{WB zAV*76IoRJVM+;Z=Lg~faCVQO~?DnK8;t{tx-AwEvm;ad4!vr_t$DMw$!(I?P zLUay`nkPGliK88F6&PITh_xQ)9Onog7PUzBArp%o5p=l^>tu&A&k`B_m{{&i_N-jt zRC(B&;`DsC2hUFu*Ii&;Qx2?;{ z)&_7&AwqH4I=Nae4{p$!a-(d1w(w-V#W(4V+#(y9)on)P;#n!+22aFI#rJu28OcyTUZ1*4L;o`@c4 z_f8^WxfZg$)#K^5$omZjl9UIx5YY&+{0=PQ(_|5$AN<+r6BqE#@Z9>9IS!oR}>pDz>`U7IPC# z)=s}IrXwce_GQdNiz(+^`)<_HvUp3q%l@3p6mO{q><0x!F6#{0U)89D{fMAgSJHk| zP;67meoRp0Z%*3Yr%@UE`&!9i`$>%&v412e-mZ+=KNb{kzW3NK35q61=K}jR*K$wC zF1#v+KlE|t+H>eS^QoI0=LPnAHs(c()3h{lejD=e-&J#(d;6tnoW2p~Mb67Jz4R+P zIeiO)kn`$Yoc!O+b%f9EQYvf<|Jz1-fukU+wp+^4qzI#^+ zvI+v7H}>7$ppkFx+c_x6`IP(CzS^5L^6&es&kK_E{&U~+k7?xF`=0!v*xIfqUfbUH z=r05vCE5Xfqr+QO?!TbD>Ki)k+H3RZGP^#H4%y9l^hA4;qQ6I5{R+EH(Uk~1&Ln%U zqS+@Z?Y)mleN0!`mnnKSm9Md{R5W+uR6BIeO~PKLr`Zz~eSa;=&#=oC&H1zJa=3xF z6+g_bQ1p+ee62kRw0LvurcjD|mKZ}B;Vqob+KiL)hla&sfbo%_SANv>%IqoQG&N}G zJkQfY=TGv=UohEAzq^vtG--z}tm5?h;a#DNYP>RgS96+exOk0+U%J-AFFVOgzo*_S zb9tkezM{!XU)iipIf(OADUS2Ci1{#p(_&f?Q&hE8{y1>@IM>cz^N75_Tu!F zqFp$Bm8d_buNL*6F&*sh6QeGHq3T>S({kqkM2B0}-tr&GD7zPDQRR3TgF_Sz+wz~< zRxOpeiE^H^Lm|$(lc<;FghCBe{)$e#E+-Vuc}vbAOuS+j9>+1iUkFsAJHj+d-VtPDts8+8>9x;;}*#1n~3eU*B)UKS)LF5k==8#RNPbg9jO zATzRx4S_OEXe*tidzsqQZ)u9fA6KW+JC84+rY!eviyJ zH?Rrqa;`9g-Deki>qW{MWD5sHZ*kU8AT(jMa0{kWfzZSy8l4G*LJKr{I1s9ysnPF2 z`6`XR0`lOAqB7MOK;_p5#1erkb7MeE_e|Uz5L?kG6}u&HmR0pW)R8_DpR^r5ccK+2 zrcW}BJ`*3etL{~0p0ORmIS|O5PpJIEV(rHrr{82Kzge#R*nK~0yIyPGhF1%^??5U% z!?GT&cveKGw{VxG;+NLEIdpxl_UKT>a~x5~u8RK>5ryiEa3Fy*~s|K z5>C^mq2k3=oThoC;6L%0pVNOK{O?H*|HocVpLrLwjuJ8wN0*8_tTKEfGn!7tvJnNsn{X(aqFEff;^|s2pvPEe+#yX zq5676bSOKP9V;lRR$cKQta&Om#(xMgr*aziux28`4KTCfMlN+6<$Tzh9jf@S$Ms=Z zK^mkLH;HM5TBqXXYRe_LETX#Ni_CHXiTI*WQ~~F&_#zZttV*q__!gJ?5S4n26g}o~ zJ*F%Awot^5_nm4k#7e&_R)^Hu75i!#{}T!O-U3c@`Nx-7?&|={-@zaHR6Mk>h79BL zIm@M_I~~UH26JZlCq+EjNMrR=GOUrH^1CqNiJyn`r}28gs&}V5(FVy8-6cqC-3*Q^8wOk4lh1VJIpn~gqr%Q5HsHwK67zosFEzUSU9- z(tRTIaGCy{T>dV?1Jzouu=p-@}$ZQ zLK|)3D>nuNL0ww83DvkC9Q3I?%Y6_@ts0ig75^Df))kP0*EyMuAqmbVPny#rA_b{* zHj7G8MI5}g(#Z*_wVdOy{uABCeBg+_dNl_1!Yzp~b`s$PM5 z`UJPz?w^p>j^oKP%Z1~sLD?*vG7coTK`wK7L~WGwC=(~kGZZE^$ukrtTI4F1iOq6h zOD!8b#h$4jXC0MyoW%?H0RMIPZ;=1G{I`t%PT;>G{yS0I7X(Fr^WWT|)vw5Y8f`(V z{3WF6whT_szNiTBFK9N5>cmbVyrTYQZj;$0vU*V-ZM)$xb~gp0~pRd-57!P9K_ z(@4vR`Vf+0$X1a9(I>c7TRCCdL<V7f>_$IOn^+N3xonqJ}1`8uCT{gVPTcGRxUtaJM0c z)LPzoa6oty|J})dp`eMke^4;!ZbDKEEadq$RPh?}Q1cIG7=P$Iw&os45ypL=Ql1np z+>JP5)#VQ3tNzNtfM0`UiEt9Is-6KOeX4^2_g6^sIJWQ|v+96Y%De%v8n-PhXZk!j zND9RecQ$gDkfd^TKhxRmP;I#Oc!Z1cEbB(g`5Fh5ttjt2LSktVL%}ESn1Yd7jq95p z*S9Q*KRU&7zRUQnByC?YY4x)FPDH}*bNTO6`5zQ3Uu!vkMgg(>4Os5qKyclhsd$)T ztg&MDEOUOwvN>`+B|;^qpAIn2;SDcjEi449sk0%xydQt)(Yveot7(Y9E)@G4X`7fr;-+8=fX9Kaj$ywSxa? z*Rm!ierV72)IMn+;SoQQ_Y2s%pV&uxIX{&*4_MF7Oe(msw`-VH5v7hr&G(4OGS?Ykyh%Z{YXYP(SGRBKrSTV^fqqTFe=w~q@* zj&n2)A!Fwlq{x@ei?-Fru+CoH!!{ruk77?{LcE47dXA_yfhPs^ z3Q;EpUJ?}7c3t50S(Zy}&n>uf7A9mKSv+WerLFCP&uMGB;D5;g6@y5cwV7u(5x=&@ ziiBs67i_U2;W+ji`vxw?#EZ6Ao^Y|>+P88J6Th>?T7}2<@9n!dhl!W$d%a>W+Yfrg zEB05JcsE(_2m4X(T$YA)g0^n>Uv^NV{%D6Z>QDA0je5ixTE);O=xkj<*NgbC#eZ%7i$@apQ8p6lh=U(ij5N2iz`cdU)K$|+P~Jj<5l7## zoOpm8i(Yo;0m`!UqPrW;E$6=#{C5)noy>nL`EM2ft=4o-yI$lJs0Eijz>bQ`j7uk% ztg(*gCc_{4F)sTwqH5Mr2dz{YHS4IgPhhfUJ!P%RW!2O3;;Zej0@m2u1J(8Tl7a%( zA|a)A66;#q`HVkED8h zl^)+M#HVbzg}55+PAXi(IUWziDyi!eI?pF`9?tQ2XbC8JKBMz|Cf~ZdDbF*ONl!?% zC*%=b$Ri|VgOjbk4F#;4N2{rKa$ZAiFI7LGb3H*^UNNi!Rk5e^Vowz<_Pk!~`TSxO z52eyq>d|1TU0>m1Iqwll-(1e#6I=l%BdZ!19BU3`ZNxwR&`)|v;X#{R_GFb)6SPTz zPEUu#O}YFsoBH3QLpCk^OuB{2*G#ZygLk#vp|~-0oND~y#9E=8;I;NSDmO35qm*-U zRy!c2)km||&C>6WW}7!lXFJ-aX5DOWC+-?W@fQ$t)DA7rYZm%mwp6gtrb9Zf85Y`f z!l~2w&9snB@S0%}^RKpZ-+NqRcLk~!XnjD#QYu?z^ua1-*274y4KOh&uKK(-sONrB zZBTDWEKGa8BE&u-eB}wgbUuwsGquxiRN_xacs!y4k0WTpzn&mq`z zW%^|q`&72F-|&TgcGY%g1a&hf@;cgTB@b60?#yfLnd<{1 zA#(Xni#&dPnfRF`a{Bcy{~i>({g!`dtP>!k=0o<0YrW96+CEDOMwGLctg$=kPgihc z<_*C$_KqM#*@%T&DeeMVO{6W94!j$Gy8;(dz~t~m;s{S0A@p>2gf!QETFtDcjQg$hERU+Z4ZvjA!DR2cjTq9MaXCb>30J8tf&X%Di7|^J-9>j;12Ff z;lahz?5bicwCa*tHA$_Sq~hs(r>EbhkWPOOvwQLS9_93paxc|<(Qxv64X6Hs;dJ*I zPJ6#Wf61Uf&k?{I6oM8`TP*#6aApdN^r?Blp3Xi@0g@9O2|Fm_a{h}lpJFfPbC6wa zpDpsqd)m1>0~e7axoPX&_+i-s`A+p$@kFZhv^?&m=Fb z(JQ$%8r9W4jT%aslxuCQgq6%6*m%f7S()poF2ZJts3EQQw)w+kn^f@SDSJe$bWDn-&M;Ec>Fykwar(=p(TY`r3>A3UzxZeU*rxg8zN>kDhrMmA6YxR& z<^l8z0XNpy1IiDG9GORqIMG&Ra1 zSbC49DTZ!kB{Qeui|_c{M;vEpO3oC|r7-7Nle{u#S6hdE*;C%;DQ}m`pCM7Fl5%`! zA0HOcsVVP*a?Mwi-+53-+BV}H7SKrk9Toy8!p+zzY@-QiMg-5gos0tI?f65VS%-^T z&Ae%JXvDI6@70c9ahsWsuld|psjs?03J6{tm_&lAgXsWZ;%=LTVgav>+ZQW)(ERgKbg}6CDBZv?#S+@KpJ@ z8xyAo#Mg$n*ja&U&&Hhr@l7GNBq|@@&XS&3pw_B7l*c2e2D|EFp!5lzB+Qx_ln*8| z?@DPF>suw2bIw{kYsalKbJ`cgmmMF5)M@usihBG8VyE3-DegYdR(je4mFS?C0Oz(z zLh--<{<{VK-2(q^fq%Eazgyt{(H4jfM27lmyCZ45E2(8D6B}62eoSp*DAv%{Qrq0t zv~Xb^{?#@m29xoDSgLl}l4Z*mFIl{#c7aMQMq=60WlNSGW7RHN6ekh2i&|>y`V)h( zx=6Zz1n;M+8z!#hb-e>Iej^tBsT+uQ*F}=?@fVI|`eUgfyvJ(X;?t=p6<*X*(3+8W zDmD;Hr^7wTo?YQctgbs7ALyy;NyUd_sdP~-W7vE%fdt$@mXC|E`uz5NMyR*Ii)cNDkG{pv!iA3=wLcusV=$FaUm%?i> z{ngALho&i-^{L1YgU}ZS#k<=dlJy9b2SR2T}OH=QU zv#@6WOCIHl)Bt3Ge+fk_q3vDW?(V_JQ0dK4SBel}4^2<8;n+~d_oU{ZOVgO?_pi?< zkEd;a`_h7QnlA=V50*pNhL1bCQPcZm@pScL`|eMbKMqe*CO+u5Rz6vTE`5acrUwT3 zcwl^o0|&ucM0edmsrSWQ%mR)H{=>|ewh+O^zo24vB@-#U(tG^AH`XA(62@8*?@jiV zIDPnJ6}oAtrXnN0W0qf@u{HIz3Duk07h^%aI0eM{L}?uj?S9$E+A!>^z4glb<1C;V zTPPpf+C0_%Sc~ZP+jwIv@GBtS4t4H1G`h=w|ChvERKGl^q;;1smsTyJSyQU01KEa? z5DE~!Rt?3?D@EEkEyO8(NkeLE8%iVn3LK}MK37EtY)hZ=gq75#=~y(Iif4RmluF|& z*e<&xrQdb%#am2!9i)UKJ*97$!S7#2QET9H_+Q=w@l`>?LCCDqg&oK~+>T4(&J|U> z8*arXS zdS*-bmr&Ree`oBb75=yjTaeB~q9v?5Re$(o7dG&`?N4tBEcx~A8I08V8$qhI{d0P? z1h4POz%S3(diooudOiJd7S`-zc$%txu#VN;A5Y_?9Zx6tk1o{3C9sdRA>K3EQ<{2z zoCP!|N?8I?#pAv>$7)XR!fonIsm<=6JKq9q1nVNb;UuD1DHD8&>;-H{l@LW)yC22^ zdNX)%EfX){0GE~f<}P5taMHiavvNO-1@w;gb^CaZNW~h~?2mP9L-nn;!CFsjk~ zNho4Te-w{<)x1bI+3HQW$OI(S7n@uS}Od*?MnG%=hSXcRB zEu!0JtLFC!4DiWc*oxlRL9~G{=0f^Q-5-od3yO57d$WG$lmAi97J@X0^cioW3zo8K2>LA^e0*WC}weR7YrpdVj*D{7xA57bm z0Y3T1S}_pcosIXz6Q#|K{<(`=;Ik@vUnnztiWqAPZm7pgc=(H^8=tIWbwkK-y2K#h zm$!iS-V*O*4EbR!ptt1PM?=0i3v2f2FuKo?dY|kCY{(9j@Vx?Zw;^AgV>SDKc1Ewf zf9~QI_-w>NX806Q%$9Jh#4#Y6!x#Hl80JQjKDozQusi1Grzmvo z{y4{K_V?_TuGt^wSj~8@va~7J7h?gviQY`f>#ek3W}%<%HYVfA7`|QOW7AU_m!=Wl z+8Tcovo>EGo~BHsd%$PKe6o1D29ksRD&>p8(-VpMn3$;Xd@%?;`gqDjN{qd}7`^)S zrF|@UseZl~3e>MZJJb_PmGDeB&Gs4J+{G>M8Lsm>Nt)qPL;+j;ZJzRM@W)z2x6c}k zF~BGPSS#rJdSSoIcHNAU1Qf8NKautkCi5)t$0~HwP#X5fSOQCddd5?kQg^w-K6wjh z9~?zrmv{g@?3X!TKfaO6PqT!(ll?xv)}?y7MD`*!^d(E_gq#ij*vHzyPd0?3gFU6} z^2v&l1dO#~C{x0((~y2&jAQlsf6iBT1OMFl7RWEMbw>wFc_g4T?t&K3F9e0pO^tsc zrCLGS;G2JcR>;Hf(tl>9uyF@1b{sa#udC6ZC}Clf-3 z*@dky>1%4LO?@#J)i3)5cWY=4#tc^ah=D-|A?-jG@-OrFd}h<^QP09sq!qM~yf}<+ zRF~Xr{srvUj)RT~Mw=<~4qEPbtkwtFK{u$hxHOr5tt}xW?7yLPvr7qne*p#CL5azan5F$bc>a%hAB037mMZ&8o-&kxd~+2#ezD`R zS*$$#%P!LO(&SR5j>ls474(0#&85p7kJWUh`meUQG?@jh9%r%#3lYde9wxwcyu~F;`SC{bMdnvp^yBH48?E6)y9Jw6_R$ZrvUyoI#;zt@s)fq(vjR+QZQ2i^K5zwzl`v)iHHm+y`Y_29Xd5{_?6 z;}$(YtB3AxUyFbeSn_*2XD|KAboltbp;Xw{w>_2b9ju)FSv8P}{VR;}EvAS~1Cgc6 zMoT!O$~BQ+0Y&Wachoedqx`WKu_2R9btl4phWr>i{EHB_!1c#JL-;D3lV3NK@bi2s z4Mu+)o~FK3BOmUCEy8ppR$ns9HW*JYC&>-a$i}d@*=>lK4>{zi(Lb%j0S5 z_33+cz8E|`DZhGrF?f37NniIWsh@nZc)F5_5x*x)K3P0nI7{sItIRKtr;UDlYbd%0 zzsZ^L@xvF?n5A)gn(?FG{$Eb#o5|C6Zlb${TKebmH1?(ZKDFzILDQ4O+cAB<@~+P( zkEbox>+^TGd@*=>dg5s~NOv}q@Oidd5~HU#+S}KQ_x1Xkr}4{dKAAjy-MD>7KY-_d z1eV6>X~vU<{=ejKASU&m;(?`DV$qX0>AJyzL|xPE5HV<#x*4i50(Ad}&-nMaL>$V0IPSkQ=E=r`b zb&2kC>k7V%N%cqWz0r8Fa~;1)8Zl#WVw^9V&SOFs_70@xkkz7zN%sSga+a=?f;hnpwCnC*+n6GKf+7T!lb z8Wn%L2CSimq0EMX!Or$kYpA)kp*y`X6>Cd?zrh;nGU(>kCcJnqmO_!;4ecA7wo(xj z%4FhA-Ig!_e_5@%avfkb%7mjB>D~Cn-Ei-a#XM~o;)7N)mfDgfQyS5bBk`V0KPmBu zWGWIxwb209P#dM2kZkFJ^-OhSyQ3ZWAz%C?r9{q%r4mhvREo+;s2#x-ON~rNETfP_ z0@Q9#4pp%u6G58_xkPX4?M>%6Hpa0PPZ0wGbt==bXAm7W5J}4vgKep9G<0^5uk?;J zDWTUB#?{$?Ud(tu0!5ZQcy@}LdBtwl8PxMeA+auI=La3F_b|<81*+DcwQzVs& z|CGxVeq{veg^0G-G0vVKyEGKE=8X2`Zm*z<)%9HNpkvuO?QBu0hVCgHQ zbX*}_wDb^t*-fOWk>hxY(|ZQHsR~w_Y#!8RiL$md>=3fSgr7bJ7qK^CsB@8~hRzKqZ)-n2++fg+ z2Az{b3#PtAYLAeE8`7J4Qd|`wZ`+o(@TTT=;cLyOZ*ADp(j-OYWp#8mbQaF>G(mW{ zAN`o2#*FVijbk;Q?M!Y#e<~o{*51&x$x^T+du8|`7uZG*YX}>*ZU{Hx|I<4+gtxUf zZ;*}F)YcVl&4an|<3q_TCQe8Q^Yb3isEKL`Z`WmP54T8CL^YXE;Rz$pw7MkE$Y%1kVmWD=>|N^&59)rD9|u3RCPSDe7I zG1e2NMV3f4HDOT@jW&^LTF|AkG_+NKh>j;bgHnqusiOsQG2?@ck;s>)ybUt+Z*B5i4C zKLsJFJKHN}DoVr?!x45JO283Pu}Eq#O#4%fW#tNs5SqVGpf`%yb*LMou`g}$qCJ5K zFc1NS!P^r{M^o`6ZC!ffv4NiSQcJv*LPXgCEaoZN4lI{fcpuT3EM^Z5!$YW3IF?T0 z%ekW&I8-8&z*?L@#VaW(K~hpqa#sccV@TLbiDA4LBAkiFEqWQTl}e|r-kx~M!puI9 zu=?W`Kd5Kz&c?Da+CJgnqPG`6;*ae*ibfFTZqYZ zX)d)4xx1}wI+fEKPGqSlv6DGTiX&K<#4O&-5h+@mQ!s$9(q9J8v$%hFUBN33^aM#s zW95s^>d*GYl94`)`}3?cMFHLc%C0~-z!~a!i6JbnX`#%{5awiT0KJCRI>}aK)q1CV;F}_t|Xv08k z5PRp=*ig$*BQJcZ99H?;dSw>Y(PI0h3M4srCEIB$%K;Iti3Ja9vXWgGJRGJlN3yqJ z)fHiY%Zg&6rS)Lgkx6Bva2G9B%4uGYm|k{!ekj#53i55@C_RR&5ZsJa4xBZ;aTBKM zu^bE**3m>e7$e9-jD(BuB-=-e<#ZOx$s~lshz{O^k7{6) zGnA%mBf_CZc1HRT{jkQQjsJj*1-Rl6b=ZP5ykBV$%gzk823QqPWf3 zY_~=XVDM+#N1>}Lxdq#GkHD^4T8jk&o#~*>Fy%z?Hcbm_G+Jz6Ru~oDo9-P7!+)^~ zrE23~1#fCi!5~8L8W2&)6Gshz5trh{he%<)FZK1|7zVrj?=eTK*}xb4MJ9w$3dvW22CFC{6vn^yl}9D%Wq;kOJB zKNSkEA;Xoy+_hfkYb1F93NoUqNy}8)G<1@$TG?DmZhU&kWCHTC^ExooH=saCL>r6amd9=IUdD;L!;viM=am0;VoIN zeLCIES9P4LPBVbxxHG-6za!mUFbq+6q%1v%%K??{<~b^y&ZqONp|2EVvEayAq)JO` z$K+edTr}fai4cWg#1xh}Lup#I<{jVWSU3oYb-D_Pn4Zv%N+uUTWLGpom`89X2XQYu zkE8-*#xmL@(+UOa?VddrR;1Y4VlR!wAr@I0#hXd?_q5fAC728~?O0=ASxY{QB-ZQ$ zIJg=O(>jZ;ctKMto6Jy>7Q{U`GO{{p&lw&}_oc(B=rDG2R7{Md#6VA2BfVrenM~7q zMlYz5UQ!k06EU-RJ_zagfYhE3LbL#QXy8eY)sOzA>3C<(rmwsejQJgqW7i8d5s6(K>-SI zbj@l7)x-y%rK(_>U zW`te3jc5Zr1hH%+wTrfVyjT{Suynt;3e92>%{$*LHt`78u#iAesJnMWC&%zmJ|=lM zl*Tls6y?hk?fsU6pP*ba9N&$-c4CBARh*DOn0MtkS!RW_QN{Pya4?`F7)!KDQ&?t{ z&a842(#cde?xfL?6^D8pbTEyx6?nO##PWz_i(?xck4Nx&1Lbg#L9-MuqeOIv**UpQ z9W5+68Af+z<%xOT-Ayb2>E@=qP&u4S^A0$c7=eQi4k0g|iAU&&0lO+#!JCkd2=0*M zI9?p)bkbP@wxvnjw2gHpup5k|aq>u)4qnVsss%?>xX@`Yng!BneaW|1INdgY%}yUq zg1OUpKrab)}+kxKws%3q+{pBc)rK ztwCuR>chF2(PrAar_#wzT1C=I2EuWBMAnmuhG8|#DK2={u~BTcoF!@0_I2z@(?K3R z3(|&jocJh?7x*p?EoX*%v45jw4Gu7P)Ppm3s;g4;bOGnKBu};8O;? zToB9P~JNF>X%77l{qxS`f3O2fMJKn!;Phc;yTTk+$S zZLw4v-6d9ZM=~b-Py{&4*a^N}Dac`*b1{N;MD=jLI*b=HqD{NIv$-ugHO{4@OC^ySf;Z7l07qi9&w*3oo)h0OmKCAHkqD*4%01)@P-{NogzNw;~kyb+6v+AU2<(Nic2ZESehBkQ-}fHhzIGhK%*yCaFNaSONChH%SP)nFRd z+$y(19@dGwQyp7cIy+&RDdV(;mO^l@6$iQzN2$lcQhirj_|%O;3id22$>>rImTAV9 zX}C-?zFfm)n(-AHF4K(5+qA4!rWs$Um6vJ8Ptb6gK6Rsan-1fEfH<1tHf1(+cD9F4Zr|3`Ry@0{y=7Z_ zOXumuOP~|mH*^T6DX3w?0rJ@$HsbiZn2iN9S~@pu32*J%QaqE|rFd>@gYArb1HS`O0jH^0^}IxI3UUu?g|C4E2bU z-Ft*q`U{1*8*Fr!4X0#$^DT@$LVj+R@514B8{dqhY!-|-8;)W+fFPQWa~STK;P+Pc z3AWZna)G;Kr@z8W;S_AH0l*sUgIJ3_yL+Gckf?n92~?>S8hPH z8g$3-bcggp)u!D-SgtuGy`P@OLXuVnSo847A2|X_<1VUPR?$k6Rz~?Kb%a>s;3lb8 z0YIQ32perwFO?me#fuv;LyHvwHyUT@11Y$l6(Vg{&<3sEWu7#%D4qEVbQWG(C}nv}Ei%tM}KB}TCrqf;34q4YQ` zQj#0{X@Q#Dfg_UE$evhA#*-vgS(vht%~+D|j^j>l1{(mZ^@n?xaScckh%lm0c=xg- zhl(7DPQ_BY4Mke8*wG(uR7Y8&HuU(IxMf1_K<5rD76FfU(>Sf+n`!h!ByRWM)PSC0 zOGbK@V0(k@10Skqa1Ra3U$t~e!;ugUbBh`(!$ok{pH{`-!n!dsf^+XQZpVA&C>u~7 zkYmQ|Etn~=Xk3gZ(zF)s&yXXJdIBgfCjdq-#l1~D&PsN0g7P_mJaN9ymBxt$U-3vr z&j6n#(SDyHIur=g7MfggfY$na4nX^NY~Q$BXpu=L+u~^m+6k!gdAkDg0SX7Ac-qRb zVfz3B(2?TyEL99EGr5YTHJUsEp~C^IwXvNxO51S6jzu7L3c2SDA-f&l%)q%H9ntV( zymZGArKk?VR709NV>Dn=FWr_@5~U4ejl=<~G!tgwY%hjKN>E9ul}y2o5BFMdxDo3? z5w;Ex9$w!?zK(k?(rR*Z;%lS((WHz{h)$))0a}LmX(4duAXI)^uZKcJr>J&@)ok(V z%98Y23entcd6m@5hyhDA=W^m`iDojI;?arp2n1bmtc@cU{H3!Ky3(mNuPFGI21XAK zkg)Ymr*ZR|eUwfz#F~S8d^cu$i$`&|8&A2(^#v!80ku3+!Y>f6vBRU0j}#8cIP{Xk zkgFgHaxg*Apa5jG;I6^Ig7#x-u^nt^YpHE+Yg)Ll4*zPKFl*7h@7iTcmMverWbu;P z1uC@|iDgTdEm?YuWm(hkk3RN!?Up@SZO@rBA#|N>Sl9d0LhBatuN>cud8n#ADQ4mlVkF(ekSc zmwb{)7Vj!GH%Al7G~G@;kxWtmO|YT{%B#tX$Ao zxul_TRdZ$Ar4!y)c8&6wv+c@N@F31F=r^}&avje^POZS-uWI?5RemG;Cp_`e;I+>C z1A%&SR=BKeSZc4=HNM4)?~Kao?b08oY04I=e0e4Q6$i-g)bexkHU7*2@^8@cGlqVu z_XAq~@j+Pt?R|NmX>wVo*T&Av4n}jsq%t@i@x7|?Em4kGi0_Vx;A>_+s_#)s2hvAM zb?QR-&00Ri6#YZ_JqO6Y>;U<9YWeeZ;YgGG#}1JHqLyFCzM$sxh4PQm^3w(MH*5LX z0{J~!esh8R%e4Fx3*_Ia<-e;y{$pBxm65*y{T#G@fu6T*`|p*L=|V#k|Li(E)TMq6 zt8R4FN*rD;!fc%#rEdt;(VZt8^+&BpGG6fOK2}{KiC3!96jX=#2gT}WuSBy>otkU# z)iTKApL)jQXG48;OIOllq_on+7faz+?kt`~(~JAbFnse2QWw#8frbRab2GM@pfGls z!d*lkdYScYz`$3 z)KIjviw$#eTAJ-gEZKwMkn;g*D7rDrPqh2wE8sI^2sKWbY^~hwdthk6f;H8fh|C#? z;QnO4u*C}2SQB$onzPP!XO@Tl=1weI>qg4n>izQLuH}g0y(6tA32N5oby7P z-NScUfnc!glEC6A$O!F4P6jzU+{1x~LMzKI0lW$5L#|!sl3dgLqnsb#yN^0{S! z1yfM0&UGIT1jiKm4GOvCQv*ki$$1Gmhm?obfp;xbY;~&-ckR%+fIX( z4ETgB;Fdj9AonxKT~a>Hb;~~HPC^rxhmLY5Q%kyKYs;L8iwkIcgasbrE-bswoxIj{ z*A@`_1j?+0Rc=|PK<-n>UCgS+&YMu zyu+QFp(Z-MYzcCng0M?*{g``FXt8_bT6gYsZp~VE9=vaQ*$%fBnTJB#Nf~!0sjqWw zr+QzYYK%vH5_XbTI%9G^i=2k?z!6j3Nujwg0HW8qho9n3+!81oQ}{uyZfG6KO)OjI zx}ic6A4MVZF1IXj?34oS{hb5ke;@g<)jhE+aKscyxxRqaKN&}vU!ct5a_5$dFpMTS zzqdAHP%Os4d(~a)jMTd8%Q9|d*#}+w6?ZWT)w;W#U!zPF%4`f>=T=eC(E{eb1hJLn zPDS82bbV+(n&R-X&$-7q6Zg3%l-=!im7PN4z@1hWSab-dCUZYK<)Ix&2u}!I^H=JMzSJYcDS?4`p_l4?#!~lky9}m zAHFEC$abrp@1aU_FzBi`yDL!Hd9Z4VyR0`j-G$_<-hFql28G`YWZczdaIo64%iQe< z3X=o#rnt>z&s^%Re~+65`=m0b{wWHpQ{1IxY1ww6_3p-DcQ?v!Ts+f?j(c~43c@F&%nIvPi^SCG#c@H?#w{rOgPge?s1p6>#uWHFLoE~ zaN%P|V2b#ddr0Uw^w?T=W!Y_*+hQ4aj&tY^bk=4}!k={)w7N$$xeJ^@FjaP;NiUxV7>D=+5_WlZu0YOQ zq4?-Rim&$a3mW$R1LWU@{16PIrPrRt2yE0H3aV+D0r@z zvGXMToXbr|xmmO#K9`jlM+bT2LhM$8)}PG0w2dRPbWno zSYDvC1+5iDaPyQ_$uUny6kbzA&Xgkf)FSw_BKY(o_#s8`8Ab4!Metcg@YzN1LyO?% z>5?esScerUUt0t}q6mIu5&Wnk_`D+c(M9kDMet*b;Kvog%~M-Z%(0dfDZi`;PN%M8 zKaRC>EC|H0Ru#d`yB4CDPTE?dJ3Vc5Pm)i)mWQyMeAiMg6kA5j;)pW9}x-*$(ezJn<-j+QzPVJ=$)d)H+A3Z zR@gbk^5R>Alu!5UrdVElQy%j&<6eAI_qXa{&lLQpK1$;80H#=8d|M(5JivB(@lDm` zDaO6{rtV(_*-kIMsfbT!)l)1lzA2m{{}juMZ)zrZFU$Ahn<}4R+>37t|1#Iti*M?F z6x}CKHp?pU<-JAl-I$<<D-_nBt1zirHwS03!JoRf37iY%%RsT{?MiL%5A@=DF? z^@5d~L1;vJtz=n)vOM96m!K;pPIAyBxz9~9ML3!~_bHbt(;gLJO!2kJ)d!xg$u93LvM>Q|p zrj^%c?Rzx5Ri^3ks7xz4wURDor``_RWLdftYd4DL^r3dx&MEPySa}tJl|3q=sgb2{ zwIWn23WckcSy<{)xQY~WC2qF=pizFWq|cLAvR`k{`!!temv2a1=~ebWW#FoxUNUfH zH;rrhC^^3oq&3~ZRXb2Tp^qxB+F`YUt9JN`#Hn68m{b0dgPHKtH9V!^XK46?a*!*% zs-M1X;Hq9fmblrT!JrVTr!2CnQsyNH}yjq*zGXAE4)`DPJ0 zw(NJ)o+<-Za^`D(qK}teqr9>wW8g~8`-;eU!YHrg{M^8moIe+lv&8UECFdjqS8`4* z;lCwzSrac2j zd1cQY16OixE+Xdxa$`m9b2$E~ICYVnI90oK$Z>n4#7%o9m3#FfIqK6sNu-qgPMOhL znUAaaTk+9wqB;7XQm*V?UIP;TqQpazL6v_(;!HyQX;iMJZ~>(bBK41AaLC*>E)o_TVixx*+wN#bW2 z_b4`oZ& zXZo5V_)8kDVkR-1E!Pz!N5{WX1Xs@uPuUq zL&Mdcl;oGod6VR*xq$GFA~>DL(uc~^oTom&ErKtWagoYa}j*CjQ6IT!6NvbMew&YoYpPs^D8<3lYAYYC+BSwf4B&~T^{9|KO3gF`gzV$r<_=16-CGoEt z_)dxcz`*+?{;YvNu~z^u8~DD<1n`D|4@)^NH6%W&-S$d+s)4^x;&ToB%Dv2P)fxCr z5?^QFpOpA127a@Yf4YI+A@M!~|E$Eb2L8CjFE#L=N&I>Pw=Wm=-)7(y62Hg550Uu8 z2L2U^KVjg_?-uf(HSnn)5cnSq{M!=$yMezc@d~;AQT^q9P{=vdz^6%kp@APQ@e>Vv zxx`N~@Ft0$Y2fV=-(}!E5^`vV58i^lj;BzFt(7=zB_=yHSU*e}2_=yrf)4+cs z@m&V~vc%6f@Yf}NwSgb@VNtJJ4E#8Wf7Za;CH}C1k4pRr1HWD3&l>ps690pNe_i5# zH}D@xyh6?os{MZ}@k0&#uM%Hq;KS12PBid$WcgDJ{Ir`y`5-#uyI_sIF{Sp)yL#9uJ*4@vxG13z2NcYiVP z|CHt5G4OXJKFJmBr24By%9&;0hf1983)4rHKStuq4Sc1<>ka&5iElCRHi?G~{BP3E za}E3t65nm$zm)i>fv2Cn8udY)64vth5G zR~xumU!82=J7oDT1Mii1)WDMx-)-O*NcW>4E!cp{uTrOq{KgM;P*-V%Le{c ziGSO`)w=E{2L3Bq{?`Wndx`(az+aR2KMnj1iC4&dz3NBjVv9es419{j=NtIp5?^WH zO%iW5@DE75-N64T@tp?#^rga{Ap;LyCh!Xke2v84Yv4O1ev^UsO8k=so{{(i27Zae zziHstN&HCz|A@q&Gw^#Q{;Gkib^BWeuI8PPJSS28rRJSO3|!4SM;W;D9?@Q^He@c9%flt{h^fep!hh#r)G4O=+=Q9la-4gFJ@b^nx-G`)XI*0iWiC=7#e?a2b z8u+&*ev5(sOyYML`0phCMFanv#J_3awyf_D4ZK3)zclda5`Wpi-zD+C8MqqnjyxZx zY-)$)vV66HH%a_m2Hq+0V+}ka@e>SuP~y!7J|gk$27a-`&oS`pB%U;IcP}b|&&3A* zbLnqa82BG0eyxEo-OFOEdklPqoX5Xp;KxY(TLylK#J_LgtrGvafppGYce;FvA{};0OVN0w&557BPVU69^DiL4mL(5(N@T*j%Fl z%owAnsJH_6UX|;L%LP=_pn!1)+_={bcMzB0f}leFRozu{I+e*ygwvPPM>pT0*_-6@n-Y@l=)%eaf07VysO}k5kFh-XNYGC{vYC#1>Z${j^KNVmkM4< z`=Xl#_g<^V}~2l3;AClhZ(??-rC zt|H!2@MnngdwbUJNB;K~`pt;<5xgVufr9rSK3wpth>sOKllUaTrxU+G@CC$k1V2c8 zk>K|bFA{t!@yi6?OMI2!^Qqr%6nqfzwStc)zFzQu5Z@&DYT}OxejD+B3H}rD7X<&D z_#VN#(f;{s!8;M>_iH>KS`j}c^qUcP)B7^kPbYr1;GJmyJg^QvOz>FJpDTDA@kN3^ zM|_3gPZPgM@MFa968wAO8wLNAc!l5(t=4hlHNiU)|3L85iGL}0cj89`Ka2QD!8y(} zrT3ED{~TxH1m`%@Rd9|oXA918<~+gqxk{$s{9I+4;QU-AS8#r=QYbh-S1A^ppR1G$ z&d*iu5}fZ}9u%DKU!E46_bodF=lhhm1n2vd4+ZD@k%NNs{m8F^^Ya83y*T7?4DW{p zA4mHK{=OLN=MwKB^!d3>Kf(FA%`m}B$xfEw{M=@S;17`g#e%<1e3{?_X+EzMJe~N> zg7b5a`vm9bB##Kr&pnc>{mJ7SN4%rp zeTknb_$cB712@rwk1iuh8&-z2_T@c$6MUGQx;>UKUL_>0812>u4~ z-Gcv{`1^u?P5f)YehKi2p43Hsbt!Fz(Mv z;!RuETwlk_v>Y#Z74hzZzeRTX2>vDUG{L_oK2C7ERM$IQ@OH%W1n*3Iso*_`mk6Fr ze2w7!h~F#tdBnE~KAHGCg3l)Yh2VL_e-`{w;_fyz`+o)T(*?hl_+Y{BAf74s{lsSq z{uJ>7!FLe9Qt(%aUoZGR;`a;wA@Qw(A0WO{@Gpt~Bsklt7W@$D$F{B6Z{HE`Ao!2O zdkFp$@qU6QgtXnD;Jt}Y7CeRc9KnYYFA#hL@v8+NMf?WArxCwX@Y%#45PSfw)29Vr zdcAJf+k&T){Zo!X{{yT!(q<=tgAMx)6=jWXK<#mqd zy{KK$^rd#@xn$>b!3&7@68tja0|md9_z1yoBtAj#oy2Df{w(o}1%IFTQo%nYey!kN z6TeaLABo>3_#ea{5Il<3#gl@!C;o!q3B+F$d?NAp1)oFwbHSe{{)6DJ6K_mk6m9~` z>}>e|67oMz@Yje31m|(@DfrE#pDy_A#IppyoA?aD|4uwl@W+TR5uC^U8o_y<+$Z>h zWalBl)2M%*7M$l#h2Tk~|Aye~|9-&-lm5?w-%tDx!7m}+xI@i&csKEOf|n9MU2u-i z$%0=_`a=X?MSPUtJigNfZ%y%Gp5W|%f#B@_wSv3I&h>(`|91(_{y!)<`~Q^SJP%(K zoZI!f;5?2W2>veh&liIKLHxMj9}#cUvF12FOYJ>PaJJu5@W)AifZ)7e9WD4xq+cNT zYPv62A-I?LYQdWmzg6%{h;I;l3Gt@{zkv95!P^smRq$TK-xvHm;$H~P_Z?M&k0t#R zf=?n|5MOg#9;D|6D+E7G&o^!m{7%weEBG&@zd`T<(tkv7eh#)x@M6-h6g))yUBPcA z{LxO)s{3gMFCw`mY&B>p;1@A?Cqu?WnKPdQI;*Sb`CGpP% z{}0WFLv`>Yg1B@IQ$s3m!}J?L5J|5+5UYKjIe(9weS8_$1=X1fNNKmEe~Uzg6(%#5W3FLi};T z*ARbR@VkhAB>0=e&rPV=&%18d@{@uW5Pw$i(ZnkRKcDz+!RHd+EBMpIKM{N*@oxpc zl6Z%%HT^Fqo*?+A#QO{0_zqousNmJ4zfkZ&q`zEn)?X#~Y|>vNIP3pQ@DS-&2+sPy z3H}i2x9V22ABL>ca!0|N5l+?QG2@z{xtF4 zf~OE4B={iWLBWR*pDcJ9@i~IeB%UvL4)H4lUr0P8_~pcJ7rcb{-vuutzFF{Fh(9m* zeZ*fA{9)oB2|k7RH-cvp|3UDP#7_{nVc2@>p;PA$iCSPDOL+qX4-mgZaGD<0m4f#q z{hI_ooA^e-Q;0t$_z>cI1c*65?+Pel79;2+rSs_(t#>N&i>D?;!4`fXUvE|9<~`!M`RuHwr$O=JVZxrx1Tq@a@E(6+D}Gh2YDG?-u+f z;%^B40P#NrzlPR@yI0Ni(wBI&;3J6p1V5j6Yrz)~4+!qMSJ&4=@U^6Wmf)L+_Z56Q z@j-&`C!QwwkHj+t|Cs!lEO<-e7Yg2q_-w&@5Wh(9zQh*_o<_V-@G-{` zUnTgZ#LEP~lK9Pnhlt-H_-(}R6?`M{zYG2-@qY^b4DrVW-$ndig6}0>A-J_c&!1NX zKTP^>3+}m3>%S*>0`U(8Kacolg3l!Wjo`(^zZZNX@t+0XLHxMjUl6Yr{7>Ru+N5$k zY)2corh@k;-dym>#M=s9NIYKf8;Exi{9)of1b?0QS%QB}ydQDg{(1C}sB^l|pSDqF zjx+dKfJRc8i3Z2(`vw2d8QFqQB!02M(GDMr432gtlm6wz+0V&T;0A+x*$8~zCG0FD z{~r|kyq|x<;EfDBFA6)?lAYHK{lu`JXstKJF0uuaH0g5S;6MLU4W$^}J!f zDI15+*M$Qo=UDikk948m=5IP@yx{ETEWxiPe-;?_o3U~DyiDkyP4=%7 zobBIg*zp;5HVXamWalx#+0L_u9lv3xQs~bnJMRh3c0M!gG&k)0DD(@-&Yyy_ov378 z82i74VW*41TN-?b!Ff$%b|!J2Kc!UfRDY1$SdXI6f782=Q+PpG*7~gSXZu)Y*kj!@=XVk;cm}IM0(# zg5SPD6}Nf{ei!k9g7@E~^@D;BAwHQny4^;rs`Ff-{{;D&Z*Ux!#WXI32FK(GvVXO~ zQU5K{FEKbKGfDp@gQNZ#bn(B{;F#p=-Fkzg{%X?yyTLIziR?c?oZH(6^6+@c;B7Th z=RLws1@*&62FH4zp?VJ(9Ftt{55%!vv`>#itz!m{1I|aIb99R5$sVe=mEhbDodxH4 z(%azZr;9d0XB!+{;Q2Ge;HW>E^oJT8^*3yQ6CC4+W4qcZqE7{eKH6DJc2)@fG4T?^ zPJ6@7KZJfa+LS#ics}tL3_BeRJD&>uZKQuta63vDI&N@m@0lAk_tJ#nap85^T=0>k zA1^rT_aKh_)=`^Q=fQ?P_S-1(CsXiSiBA)DT9K`#f{!9zYS_VcP2Zq1ZWElpceGLP zeA0hZ@IvA*3VtQ=Hw5Q-yI=6zN&id1d45(2&hzku;183X=)RUZc)Yd~ZzVYYPAxzj z$0c4DRp;J9|65v*0}YPj)tEMYLky1n%;P>*@Czv}%@n+Z_{9cC`-f=U7a1Jw^L@u< z21os5+SFfVaMb7Vz24xc{|f2fXmHg3Xak(!xXa+E-xoU;j{6Lb`aDk_GC1nXzco1O zZzTO6437Fd|9>|)>K`KglLklqd&z#2ejvcX^Yb6X+Z&v=5=yU&!O?y)ZLWI?ow^K+uX(GJI}Y=fizdpa z`cIL5iNR5S3;BPO!BIb>Ih^3Q)!?ZABI&O;IO=b2iP~@&L#xbmkBdSh9~1^CjRCw_jL;MZFI}(3a@ZQ8f6+D@EmEZ%39}}GIxCd*$cpS%)zK^&K z*@;Gbu!?4(axh}XAW`p^E}AI zqfqE~YpeM+LVupd)-6JR5$WG+==UI9{CL>VNB`ab(3#H&&i$~<;OPGrvj3{V&3^c| z!Lc7wsULnIj_pN%NVKXAeYAgw?8lx90vxPASBq9B;yCW8pB$$%dKmg=kS>1oH}uiZ zIBM^3!Oz=(+VH-^;AnpZ*`I81w8Q-~hdBC4U!8!IWnF1-deyIZnXuD?{JB$b_UA#t zdH?p5!PU5spIZ%%e!fHVb0=~1vzPKjpY{p;f#lBt!P%eh46eqD>a8-kS#My7u7}rY zBKdQs;QYO>{(?Wi<0bgx#3u;8op`q3uM=M&c%%EZf0qm1lKAz4`ybHycM2Xye3Rg3 z65lHLbmF@O_pH?R-xHkwPWzXF&nG)S3%-K5ivkPx|0?3m1;3eiK=6&k&l3D$;zI-v zJgEJ@MeyIK|L+ofKk)|y|BU#Pg7e>3d_nLZNdF_j83=LZf4}aK;M_lLhSnU%44OZk1n1u!pCLH^?zo@eybsS5JcaC+3*MCC)op_R zLi+a!{v7d#1>a44o8a#e-zE4#;$H~fny!zB1-FR*B6x4|-yT-8KSvU8Cin#69R#0A zJW=q4#QO?fOnj)|WyHq`emn8$g0CmONbnTmmkEA^__cx`AYLZ;{lwP^zK!_(g1<%l zDZz`V|F;W1oA|4O=MsNk@CC&6XzBfJJP2KFO`<3RMdVY7(_<#JA4Yz^ODod$E6k4) z=jSn4yc7ICud&uo(H}}5`5(kn1$UDpLBTr^&l0=~@u`9jB0fv-VZ`SPem?O6!DkU) zE_e~~V!`>}PcIexPSRf^`0K>i3BI5B2Eh*y-z4}!;+qApBEC)VW5g>2x9B-ZrQlJ- z_Xr+Ke81o=h#wHVE%AebcO+gV`02!t3Eqvknoy9(^X*LHQ8a&IKZ34R;#4T9f8e3RgRC%#$mhlpP${G6Nh zISwZZeU8IPf^!^B5uD?2s^A=lgMxD$&JvvC@KnJ$4$l&t8)S=QzAcaE`;91?M=tO>mCG6@qgdt`wZ(@E*ZA4(}J7 zwnx<-~K2!%>1S=XfqS$Kg1^ISvN|=Qx}wILF~6 z!8s162+nahRd9~OLBTl=X9>=6c&gwWhi3`Sad^JqBPk9P2+nbMx!@d!iv{O6Tq-!n z;WdJD99}0l$Kefva~$3zILG15f^!_+COF683c)!JR|?K?c#q&5hxZH4arl7X9ET4I z{x0=@mEatQj|tw6;xj+L$M~EG|F^@%07slhe=^5spm+oXr`J+eqTuvcDg0aorwUG@HOt`il?YX8zTm81VDMIk{pEr$<@s-L z`l^8{RVp}z3u}$R>6M<+Unlq|s(XXM=@pmC*(7*x(%)?GIAZv*O>lnaRAF$AC8%F1 zIP32*czaZ&W53|+&jEvXU}g9`C^+j^8N8#Re@yTq&Z8iL!-3B?_=pmmzpv#txVq1x z0&#*T(c}#nJix}`Gf{AkS4jpx-Ox`F9Ah*dsRr+?kvazjXZQVem7E;YX$5>6Ev};JhX3-@Lvg8r-~&1PyLpFZezY?U>gE zzQ03m#(%z_LT<+SIJ$5k$N%|AF}NAGryAUh&&v&N#^H4aH{{@JfT5@#>(#yBYdXv>4D&GyWtRJkih( z8r+O0^9^psjZ%Y~@nMs}%{WkLaC5yMqW;HeN=;E-O(6j}6;=FlgPZI6HiMh%`bC4A z>)PCZn(O*BstoHj*LAAF&2>G~;O4r%+2H27{+Gecb^VUP&2@dm;O4sa8FA8F*S!pG zu511s61K}+*LjA%xvra2C!)T&uFo{Mxvr-g++5dJ8r)ph_Zr+>*UuZ=T-To&++5dQ z8dUVtT-VbLZm#P}8f?@z*ERn;p2!36KOZej{RwxvnoYc!FW4 z%-~%O{;Vh(_Ghg8r)phI}L8G>#q%NuIpwrDbc>UuC3lh zIm?TBFJC-+QT9bSMcIp&WY3*llyg!3;uThQ-lC$M1=+c?3yZQB<}93ButI9j&0mz8 zJwNZF`8lAnXvxBy#rX^JF9Nm2ISXbRmgnUx&7KE3i}P1x&n;SR^`28$*!!YvRV(Hp zyC^%SX#TuBogbn6+{HQIm{!eMl(QIxoVf*y^Rjanj9P+Pb#e-UUefw5Z5I=U}lOfSj-RC9!t z;ey4p=g!YAoC~>H7sjTReHUAio9UeWw) z)uf0T(9H!4VRGfqV{FiBJzH5{=C^mv-R4jL&fP@QpjGs z{8E@=*#&d+<_U9-F7;PlKFr5jy-t}$u;4IPt(1u?3WuTKn85i4-s%-Fp$Kb(T9@XU zI`!q(u#xrOO&Hm*(R^6V^I%YmYAYMF zsiQkVk^^XJu8F_wS! zoE3TV%&x}bb8==c1WG{-CtZFa#4AQ7kPF^iX>(R&qir!o4gcoMS(2X%F>iJ)4{%Z8 z%F#Y7oV{Q{{#>#|eFAcJ_F{;f1+y3BL0-)c!18lz&~TdpbF}WwHl4!Z*gmJ0;~cgj z2ZpI=Hh!*Hh@aUbGsg{0%gi1(V#LJZld>nJ4b2>$U8_7cT&;6x*f7Y|YjSR3QHm*? zb9PvQT9SM7<5%O#duqu`VBbYs-x>z8j^dTnvi?o`GS1YLCCkF+a>#_5mFlR}NYOSp z%pQk=Sl-+tVrD9y;4t^frp$bM9pz`CG8_SQc1|qw=iQJM$^T;Dc<^&~Ey3>vI6WmE`cpM6_yIYY0q(PuxPY-@FIC5Ll%8H|XNw@86S|TJ=wXj7asbq56YV5bMXS ztE|7dD{}n@sD5+rh^A!w@%NyS>fcZGCt)EtuzuX~%K9&dPKnfhKiI`XPIOuSQYas( z{-{a10cQPpza;Cwo#v06zgbj&n)1Rq$@*`Gf|2S^iBLb@f64l<2R9?NpPy&&dl2?O z*1rl0N2-5*g!*yoEbITGj`|N!`)NDR)z=#TflzrQ|M@+(dC!SPr2l6Di&UP25|1A{ zAj>}nenu*vL_tmJOLI-u^X4Jzf1!@@vl>_)+a9U?1yr7H zSHmvI`d8M`{^ADKpI1luH4QBP1UMhb{|!{0-}`U_r2mgV;Yjm;9nJquR1o72-mmj` za{L`!NB;+C;K&WGzSjJmQb+tqqVl7{C3QmjKfaFmkvbWB#reH1`j5{Er2m8JsK1!% z?~O)`L)PD~j`|BC)E@vlvi`l$L6OFf-;0^|?&yZBzf~Ra;{f?zU-?JtsNWCm!lSW`bE=idSSp|0PF5$gZFj`g2}7h5>^y`Gk8kN>YwK2rV1&es)BrFnqu$LB+` z{T- z*}DEDDv$N!T$c5J1PnE4x~F8><&kFnJ}xcqgx8^T#E@+a=oBh|kypo<)97cQz2+<#2Jq48sx zKe>EIQJ(8%z0d0yza$zzo*2`hz-aiN>*xLdtH7j9wEgq|Jj2=q`{p5aXHfhxbuhgR z7b_g!4%44}mgT3`5r2~AYt31UbxHJpEc`G1e-G58O)T-ZYw--@Ep7m%F8)3vQv6x- zAFb)9m$6uX7W^;kx2gR}SebD=8PdXsn+ym^uAe`zfCQ#x`SP>1Mq16{waVXDNB_S? zyV=$DN5U6ftrqWfObaNBMArcZ7W!QMc=q!`J}$H zg1+<*f@MVsacS3VPbdcSA3--3oqaeZx#G}Hn6X?UBkw)56tuq$mb?^KtHhG1)U9^$ zK)cA5T%A^Y(&xJl|1u$T!ODbn;Bs2=u~^@APXZdgvN|+9A*!f-@`s@QEOc7+&d=@N z_WiccH~gJ4$T{pv-j`W+Lqa7K3$8lqTU(L4>Opck@z%qVrg3k=! zLH{J;P9)Bsg<6y#$1FmvUagUdLTVRyI&|AU0ebx<@H74(S?14=CdmMOw z(0(tNSAoyp(0EeN-W9xLM+&ABgJmld4{q*f1>IBq!LsFX!By3n(8YnG&dxN*w5u{h zA6M_m2ptZ$7KdTD@9{ryUL=9@c4pb6gcRSZ53t`>RR_zifNIMYBqU{)K`p+O7`u`y zimyoU+0acvP)-fnFJ<~3|Ies$&&*&+#mV4+{l06z1~mW|YEb377B5E06}i6CRzeS8 zU&M^a^`#t%85XRr$QbbQk{=GO1r6P&Mg7yNS0?nF(bn3zGgT z8WZ{;GxY12&?nV<#)N*(2>mc7^m`_DUX7j(_cHb?^ztTXb8g8M2~jTJwf8{Uw{=oN zRB-RN!O&i(ir_V$Rb35vD?f#fOa6Z6j;r$1y;d$By}3Vkoy?C}wDa>NR^_gfSH~<0 zmhAEe2fVrXU~s@*-^!t2dCpHK60dma&_BRLdgyn!CGSp`V4eh- zt*tpf|C-pT!k+W<$BCUP?VVq&IQv!4t`oy|%=!5%1ap4=KC#mt#rJu3{W|=$UB8a5 zoO7i5pZT7#J72oef}RGc$JL&(8SZ;j9Lu!d$+SO&3DOBC$f!`!G5@F#%#O5Ip!x7u zYcVKneK}aNGk9Uz^t2giGt;tX>^ipWW!=i;3e~hqCv5NBvEY@NAmdxP78V{{j&g(L=VHm++~7g{ z%n0o^W?301+m#rpq8yr8*3&-R(|1}rXqU&F6)f+#H(2s=s!Esahzi+3h&ldX$USD& zm%f!fp`Ogp7h}riC8YYc4r`HHa?JLvY66`ewm2)eYFJ#+++gU_YFtNr{R=3Z87v!? z5-cyR2>2mHuc-hZOO~fwa4~xAXqv|^>S^eQhQZ}#Se9>V(4Sj!9IC;;A!)9+V9DjF zR#8;&m0_u12iEZAt?Z&kxvvas1sA%q%ONIDPwzvgFGD)(OxREo4`$`W0PN<4tWU%v0?sFG}z~i;YmtITWi~67>64xiI-ksvk^Y zkNZ|#58zO_qwv`Yp|A+9?uRbLjZw+YIA;aE9DEV%t0P#}5hmlO!56~7{=``mLHpks zJaMcHdw=kGR(tkyn1RU^)ve&gL(TO8`?KMpU1^~=@G2b@3_){(p+9KVWP~e*&46#q zBME3d+^tsVM~J+QOP-@mSx@MO(2nqaELgTyZDwFU_kQ|-i3z^d_*545IMWm6rxpJJ z8=O}__HD^b$SUs>0-l~Q70#Inv(n1@6!;#mO1Iw%RlP_T!ehZ5KPK$>2KE{+_Sg-V zwq3!z6Y2`+eopPs@{U?bE-PrCgk6ROTjHQym2t^WDX_O_ba2)}n7Q-)FmsE}hb_(1 zYMYo_^4!{DaG)qU&9`;;fZ;Jq2f@B@0}!jIJ*05EV-@*v@3a|GDJ8f+TGBR%mprS; zmpgpbmqpPf&*8?yDjHs0k_cD&UB6#dQuB&GXD?pt8}B;)zRFP3J>-HKcf!W4LX0!? z)Q1^)FIQr;nEQwqU*cwzoCx^JZ-qL1Tc;;1_iZgoC zub<+4O)GhxCTz=^6E>44?8>9QRlT5hQ;ScW=DV&7q}1$$S&Q59mLTg{8x!(vnUpZq zx1}gyR(Z@Qytz0Ms(hAa?4IC`ZxeQW4m0+a9y?OijC}`ZY=-+bJ!4~wXg$vJ)VK0c@J(&MaWKke#0-b6$*K>FE`_P{N68;{(V!q~UiKagmY3tdL7IHj z*-!aiym|j0)zt$&C`$Fc*c?9k1xt3jV8UdFF8L(%Ny*o+*ZrihOE7PDq6eDu z;!1BDc&0z#m7)71@ai}%ygFL*>PSmjh0DXY>L_@t zmxyoWw~)qV;#+wDQZTtIGV&^LatG($qb7H-%O~o|omt-JW1QR> z_7B0b?J5bE@1haKxCNcz&kYsL$b#fOGr|)*7+U#pc!Fny z8YNd8&aHa_JM;b7r@@`jzmqHU?(;0zeWq2fN}z53s)#WFH~cC`1%Wgj1w;gZt_a_E zV;YaNDHF3YLMM46^PHy8i}uS-2L#JJZr_$*6kPF(=EBu@)sLVy2JQz}Zb1{iEmzsW z64>Zo_aKO=#V5P_uDcgfzAZ1Mm5og(*%279!?(H&2n>@2llA>z-f#Gn*6EC(yU(Ct zd8-M*9iMv-j{ws}*ir`#(#20 zX^cNTWk=BhxF1U|b!AkqF1S$NL9G^DsqUTJ*p(`08$=TaON?@~tihOW_#PBOGH+;}{dnd!LOo!&tS)x9S2Y!qH|dq;<4ON0&3la#2)j)+S-{kaAAeOqb{j%4GmvOeOp)Rea6tx$~vy7 zD&QR20Y0ev0StuB8j)8|X9{H6$DK%&ybrFU)veBQ$X~q{XTfZVcrC7XH&a~_fQYBU zSr8sUtpooKf%o`hgLI6>d?rcVa8yV$&;Lc{ZzO!+5;AL1xK&qoBsJ>~hQ0saX21tQQ?BRHv{}NZ&y7DFdf-5?GgJ2_nAAO?_IvF zR&EGJqP$hp;59E5V}&J$ii4q+LHFom!O-Za+|aOo=OTXwPrjj*pzep;sYK9xWmp_A zD1pJ6A1=HMcYVPYzLf)Ew|DqjbMpUaZXJIxC;uTQnvby$I`f|Hao|3zmxX5izLjs| z9akb;BDxk1>^kqloW+Z01QNT>3k(dHrydh>=H|ffhvp%jIALO-0DiQRQ&bqpUlf2Z zz0b*C02xi1=x@^F8-bj{!tBDu@c)X1mSNd6gTHI&l^hs0F{4)l4bCmht8FrG(cJvS zi*x1{1>m;^0W@m3vUK)>Jou?gPIh6=rTF6m_0odZ^^=iE6kSF(`VG! zI=T&iw*bFGE6C4ZpnjK>Ur=b_uRNe7(X$H+a~2l`I(IGX9LSxWw;*Sp_8<|I;CF2E za+U{%oEu2$5$M(}V6ee~3DA@=!^dQe8<&|qCT(i=xU7lU8R=7dzzoAJ0UkKp@aV5U ztnu_|Ta!7-Kby6!>73+Wih8V{?aAv|T23!XK#{D3KXhfatD6?CZW1T+!)OX8G2Y>bpa<2!^2`$ zhm-t|CqhY1mW8z@a`GWUSSP2QKQnUyC!eC%O<z-uiF zto5vCkt?>XnVeitK9DAhJX*FjgOl9nP?(e4=b*(&?rO5fBDV_)I}OsQx|+ouY+F+~ z*~V#>KSHx`c&D!CmObIL43$41kv-AMf8CjB>`X>@kY~#NMcdQDj^JAqJfQ8IG@Y2X zUS~V!x_X2IOypQoyQ}MsDydZGM*4JFN$WYy0Rd(eCr=n^oQ9~N4p8Hc4}{x0p&unj zIf!h8KV)N5Dd)2Ax=LEl>CcJT)_AV0I$ZyFu55U?GVZWCE90@`ZywuL7AK3TkkS5Q zVU!iNND0{rzMuX$T%=xKz9v=fZD=GuO2T87)9wOFE_RUCan910F{FBLxJY*G-pl6R z;~yi~R<>hOr=;P#$lz09!&#i<3LuX8IDl{*N5=mo?m;Kc`@W|%M;FwSlNwn=-Ew?L zT0e~D1jktjD(se1T~e(}11^Y$R>wiWWhJk_muBTo`b5@HJCE1yO~>>yUv1O%_s9V< zd2V>IOsvnF*Qv;*;Ue`;2Ug{NhZ)3u%$IdQJfa_lFWvPTX15)~6WK6tA#7_RCzpnI z6O-jE11&kp0I^3LlmXS(J89G_Gs3+y`LH;b8EfySwZQwg3@mV zYg7nAeRaZuij!3$lQklf6(akq^+D&#>i&Nl72b8WqZyz&q%#RY6OJc=r;*a+KyWL~ z%m($RtP}f0R*6j3h)h=4kpBGNU0-J!;Gy&hdk;=t5=PTGxjc*};+LuL;J61jIh=GZ zL=(4Cn0Yz8kS6Y<S!+4Nj=J|(HWjrLv@F^Z1TpKd3j=K?=)^g5u4G`DohBE7Ag$l|V z6_iyf=+vfD_0@^jU|A(HStBx8VMDIpJXdP8k$#zEai^ZL=hD#sogQ65gT{RXp?{;8 zb`7}t@)G3b0Y$ifFL0Ix&siq|)O%U~h1`SZz3KqNY~^o`VNwcz$cfj8N;_7vYFnxI z4kDGTj0^ix?|y=3_y5`=6UZU@(mmYP*4q|VT}efoSWB$}%U_Y&sWXpdoxS;gs_ZGu zOMJVI$CKe9tG8#OX&%ffr zaievdrr$QhGMn<>yuz;&;{j^y!6fnkkj`_?GGwJtRwjMIE{~JkEf@=_4)y~db4^~) z68AYMa+14DE3&jb?CL~LvddbLCGJA7=(w&^bv1w|Im`u4W`_r2nSWia!Kr`m!hOT` z;JFMZ4bxE(OvAh4nn(R!Phiuxgga?EC%ONylP0WZ$?2qeceAxyGL@@yX4wo*^0;Dk zQzMM>j7XzAHS8A$LwGjKNp@9Rtl2fS?^J7hJB__<9PXT%oHV_i7Qx$@?5*iU{f}PR z3GNh#iF@F6wDz4%D#+u(b3(y}w$U)ZKa%8Dw6rCQ!#%mlKEqi%pW@y^Tl?AnNw^>7}{c*VNNY|g$`rpltwaN z8p(X=shD3A$^4o~=GUBx`E`-ZuZv`U-Km)05Xt<8Nai=3iup~E%x{Whe$%O#-yF&O z=1Ar@pNjcyk<4$4WL|wO$C;Ios%v8M{vq;KLM{Zj#Pc%XJprIm;&R=9jR0RF=8==I zx8&rlVKkw3^;|C8HrcNGsAJ!w<Fex!m$sdOLOQ;$P36@}8?^ZrCU#q;1}UUP}46 zXMBv(yXX_%LtRQ$FQ?DHvbAg--UTJC=QMsB84nnu0!qGbsOe1ST$k5JNCn;DG`k9W zPfnU%htpvXrmzS2>lr-$XS>!j!d7N*k}J@AOqRI8uub9QcT`p@YHysg>;=BY@&qz= zo@}TgPsnPU3GXruGyjtv<(J_una)YJj4ho|@11yU7sK1fCSlt%ImsQYH+w8`AH%zF zPMS_kJq0JiyF#9OFmpJ`a}S-Eww@)PeW1um(}{-f3M0fgo^3FnYPWfYGmUggP9~m2 zIiv{Di<5VTQ8*41QXFW&{WBZB`Y(iz*GczV`ox&FJRI@3b-Z3{=GNCx`ioB%|0xX! zL7Yqsw`wLQdl1qqk|lnc1apa#t7<4V)QKy@T|0@Bw-Le`C#`46iN%vR$$)+=1&1WuZU z>W?Sf#>HVnQ#on2aca1Y&pV2o+>rz4%!M_-V2QLA*kZItY z>ng%i6XukotW$Lr;n3NTJ&c?cFs$`e!xM;?X#*O=MR@r%pfOzJ@8nKH8pAX9Ln_mN z#_)xAY`Dl|PV#OPcE+6KEhsLD$?I8a9e(LKk&|Z=(u(!#f@5A;mG?6=o>8J>%8@wN4d$5b<8Ow!=JwxHLW|9nl_wDp-rb!sNv5wj5cj+ za7`Rf;X=d9`xnY`}AfG#cgt`ov4aPD(qWzup%!Y{m|U*rfHGZWE3jlcj?V zxe&4GXzC;^!)g4ZHh4gsVAD5-Yn#H6YJ-Ecx^tFOn=6}cR8~Ogo9HtZ?k|cg|E4H- zqEbAz-hC+VPOhR_A+$U7>y-3@i*zx(;B=4}T-QcZ(s_?w@3w|5k2frHdXi(gJ_q@0 z4BY=UA0x?rubEq)?ari-M4vF#Iq41$9wuY`^t(v zbcOqHBJb$$aS$7x7p|+`7luR0J!kf0v6c2=D_Qk5lCAK}gFEs6ffe2pyRD?adKTC; zE>CG&Dc0xX#iZ~HeZpM|C;2)CQ-OQ+x^S<~4to*qKqovNS_UOEX1mOQ}S27 znDc+C>^f@Rf1d~Zpv#!g^^FZ1=COg{WGg&(8!*Ds3XYsK(~!|*JO7V2llMZ$!jpCq zC!KK!zr1(Gq25r`FvIoD34VU?-$$W7E8L~8vGSO%el~8CB zy4JRD9U6xPnqGgcZMouZ9t!ou0Jn(8wy`o=>N+i}Spt+E(zIz)_!|O!fTJOF%nyH& z73?)X9aw+JY=L@Bn+}0w%Wl9dtCeh{m)qDn+(u=pjh7pxTx=U}CAY-hnc8%k_k6Gy z*HracI}g;@v?)4ZS?v>{x{mOpwhlfJ(p+ z!SLyZ2tPFMtV)vcE=urfGYO7jsqIUFqFuxN212*i;8%AT(C%L4LL&YEuSeKgQz!%f z+(_6)Q*`Cb)}V@IdbYGxgMjtwtBUsyw*c5#MltX)$*~H5JtQo6RTXE4by3Dz&WQz! z*aj5(wAD3%$9<_%NcM9IHEkN(G)8&XpUNpAh01}60jfsq72T+T;le0mC4aj0ly2F!AE_L`N}$7D`hTM$yu0iYsMwyq(-~a$A^?O>shI z;)G2Gr7^v=HMM%t{8*>PeoYaKa{!82j+oIB!FUJsgL)B7;6-g&6C*4k%bFDSMlFxY zxZKg3DY$Tymx`a?M6Dysn%V~v@bBYcF>_sAfX&C83%yoHA100b+ziwIozF=HP`S%b>}>2fbt{9F`~O7w<&b~MGnR8neSDt z$*VOrAkVrP?*BaMG7$wO^%28~TAy^sYFQ6K%2szF?yutf^iLg32I#K#)AMf2T5BhF zO6t5`n+IF&uljMn&S60#UE;lKh~_M zs-}3Prub7$@#mW2FR%77o&5F1-lll8X1%}F6px_@>rx-?Kd?6)@lWh4M?7(1k}3Y) z3f@pSxhJtK#5w5l3&W$T<=J7mG1X+n01Ch0aQC-QgDIi@{JJ~E#<8`U*x9TL7Zw-1 zg^O`Wjm+_G|8r1v>?}Cp;c6dy2_@|_njvZI@vQ{n9%M&{=ZSv}kmh&5X*mAzOK{z8 zfge$geVc3PZfD)rR!c1Bdk0mXj%aSMV#6(0ER zgr@&7)km$7s`=mARcisX!Av~d$84PAj(pt4VRhu+MgAW)&MznbPa7wRBcBlRNg-DY z*>cq^ZwuMws#%{~$Q~hkh1^KUja|4P9Dk!+xFQ@mTGZb}$W4{(OwL#rPIO0Z=E6RA zWWNjh(~+CIaGf}E3)f9BxgEKsDBnu?@8oM)uNjU5_W8al*ReT`gdTXIdWR za+c9(SEOYGPXy~+Ms`xoMF;C@55zv-i?GJs!(GPG3D4$MmhaQcWxug z*A5!#&N3~B%LaA5p3jY3Uk2#cAkHEVSiXzu&K+pA!=ChbAFI1? za#X&{%wJtk{#EtlZ>*7TT7Iz3oP-)V+9!2(tFuR)z3SXZog1rjlsZRS9mB0_^s_?L zY?XEy*^N_cXDd>>o+gSnRp%JPMAWsW3A1_L1~tNpZwD)&6OK)3>l1eL?e=My#>f#3 zZ|@x8PFv?ZiaB@LE|oJF0#@|hwm*PnaCJuCV=pgOlCp5GeT9}(-g>)OOBi>eH`pr; zX`{VbOSpQX|8AEW(m(7Qw4|)uZ?7@RJz%djqzCQWwWMm_WUn)%f7*8%(nI!LS{eiU zx#)-Od$ja0ME&ST>`hvl1(81bG5ZlMsoEd6H*4t{%-d{lGxDCaE3|YU<~?Qa)Y3yJ z{mYKK=5*|((@=WG-k)zGt!|E8vr|K1(s?e;;IyCs7Bf?YMPt8A4!dB2ng5c#d7_!W)2^Ci=I^qTrkMG!*ahdC`IYwOsU-Kt@p#R~zeBA2TY&ZN zv+>`4aO8LFwHJ_l1SUrG`*sTawNjO@g#2kaorRS6(}X3t+i`kOHSbNc|xPow;$eV~-`)qMKeJ`n7n?N7u0KV*N&@;=l* z41b-E@~`Oy@^^L>%Qv9>1N=!*%3p`_&$d6qlz##F32px^%>NbSk+y2j*C-za`C~1& zfoo#)Z?-?WO3NcqK5qN-j%!)Xvfpk03X;`K{?l$%Lq1`*W?AWq68^9~Dj+H0PrFe#Zh24IQI1e;M>~S$YT^jCtEm+W4;<9tY8Ts=l6InUr?IOG z=FBhlKIB$~u-m;4yLEt6!Xs|&f)XBe>spoYm^;QP^SE38%Wf)Xv%8g(^MpIj5uS8+ zbcCne0Y`Y+ouGu@;0cNMU+zRD;7-%K#hs*tekg2prv%XD(;&Wix4A1^O2X0fKI`6X zNYA-nF{JJ8N<(_y{i-3o;C{`JUUa{1NEPlk3~7h^O)cT-^St0ed8XZ zC0v@`gYL0f!V8V}kb73K)zuB7fQNUI9UlehZfLVR&YA9L&x-9r3QgL_V!X%0?x7~W z*OTZU3P|0tHL|*nrEKs0ZnZ!ccvlz;;&O9ATtN%saC4~nN?H)AHCNF@Rn0DT_ffM} z3D>y$DM2-}#GT^gta1-@gw^iBj!^0z;s_yksv}(Q9_k2X?sP}E!9Bte%H2UnxY0ez z5pHs4I>H+FSVy?oo#hC(xFOD;lj!ZN2S=IeN`s?>Zf<9z=RFf{{cy}x zPEWTkqfGUpF;qftw~ni749}tgRb`SW!YSb#cdTQrkGq-USYL{LO0A!}g_F~t0--XU zLV-}J4WK}%gn{mO$Mj%#C&$3K6e5+QL)@Jmweu)mDg&wRu1-#xyBqxJSarh(UAWoy zqY6!Qe}Cv!m3CP@ux}bQ9qfXwf)1!n&xL2-C^Yd7H+pLX^{{ecq}i!KvmZ04AC*U= z+)-8+H0APorx~MlfjL?i(rCSgV?78hR{eozdcCkND z((bO~m&++K!}g`9pB0|~A+u`|oKy|Vbc9>(Ez(Ym#DKaKobclwQk8F| z&W-egESDX736+fr^z_7ZQq$!MKzRA@g@HBp22yZ!h`oc7b}zldi1K4ov~!k!3*=H- z&5mQ<=z)60qE_@^+6mzxMGv9PPY8wcXupFa7M*JAod*s@^iXI%HcSb_?B&4z{OYJ>|w9MYCCAGm{Ztv5Qx?NpiAEZ2V`U<OmN= z)9v2a4*Vw}qCZ#jUODrnrP8?5i2f?d;a~ezT8;L>Rw`W%&oQD8#X0G3XQ}ip9e{s_ zcX^g|AEv7+;SPe*M=GnDSdREp<$>0Q_;cl+fFb@;S#hQz{#ptDu$(IUGpw-a-zqnx z8RD@@_@|guZqo$F{k<}9ry>4P3I70&Q}2n&13L}zWaXZ>_03=xENk1975~xlNR-_m z-|jvg8==O}W2fveWv@NBhTO!*SSypqRnO(e- z>Ql1MUdi%F)NgK=vaANNr5!bMo%UDBt?X!)$KbIdu?ko7+}9E@G8Miv!gi}Y+!=_R(}IQe6j>I<*p%RG+$a<8MaqLE5thsIv!%(U3c zV;ub}Vx9Dr%~TpMkg-?!RC+bcuGp)aJ37S!R9g9P%|M5j40ia+Ax?T#s-v@dsFS{K zn3FC|H!eAeMmhj79~>|)EBX@Uw_%^zp!1WnqZ$ z`CQgHJ29)d%j)Zab3gPN=Yy|>%l3FIM{Wr+yrB>0x59keky~TFeNKybDBITM>SM!M zRiv!NK}EeVs}odY!`Uf#nyBb>Rgqa$SJZ&*f#Y`%m%c2jmY?C$mqjJ?be(a|?O4%S zuAY6O;H(O5LNdl>0ZB5NpX|~$U%~A2z_Tdd*{*ZmL+Kn)_Q3g^FHq{Ex~GpWs_N-W zMU~LcMUv{&6zEyU)j=+gmYxFUOC`kt@Lgi!U5yN*nNWom zRpxk?zTzukqD$ZD;qyV?WLL`BIAm%fOm(HEDvLO2ec7(mb1Kk{i(NtJmy5LWGvw>QUKBUx zm(Eb<%`WE#(09AbxwG@#>C$(0BVnES?siSLx|XQs!0V$uwjURjTI6u~MAz_W_L|-G zLDt!C`;n6lR0R*ie0S)*pBgyxvApk2+WV>Ld#~+PR#XSCw;NgUM?qG%FBP5-b#yus zfcG&US^Zn$=O=-bD9r7}KGROu5~=!+zkRxftGOi^jP zj(EP(VG(`we61@}>2K1Nj!J(Ubkc`2o%DBEDy?k(FiE8`e0h#eRq0Z=ns|=Qa`bZ&6nKp8%CsoChDLgKwB~ht)I6bB9yv4r&yxNY6Tb4Z$Aq-08RC(Joc= zFI8j~n)sKl=tq@?igF;Kv{F1TE3FlnvlA=Y>6F@OR&IoNZTWFb)U1lumIK}!bqvG|?;47vH$yS+ z%^qzT3wm$y=sPea-0Fc#@a>?ZoJ;gBF-$BY6UyG@9wX-pviAcTzsj_CwMSn}mGNRv zz>3G15P4GpGbrL_BVhS4=&H8qdt2IsDAG)wL1!XtV>QvvN5P&JCW>WUtoOIj>-msU zGa)g$Pz~5F%%UA0x){C08Tja>df*>Kon>)7{n5)*8D(yno@1MEYq|_#aO@t?!Xx^k z`1c?=xcgx^JHw+NX~yGwBIUsH7IT#`T%Rp+w6QcW)*@FsFb2~X={Tcw=Fd|4Hz3cO zuhQsni;LmQy;zlMc@wMG1W-5^9r3gn+J6per&~QeEp)WQnbcyqt_|S0YliFU7t|w(YK42P7ds?-kM$ko52_xx&i4ubJz(ffdw53(TDB8th&w5AOamLo& zqen@d!_SqL!L5!W9xL`*NaGRxsTxRE^oOd$RjWSM1F6!V*jCraS$C}sTN}9c!!2#} zExIMILSFQ(HtZbUW34rY)^%D-nF>*Rm2f@1yH_)$jNY56o9S{p3IZ(MP2Xro!R@r= zKO0`r>c&`Ihd>$+@A-B-{^MvA2PZ*NFSM>W>`G&-vAKae8{89+6^K=qRb_ko=s>2r zurGx;CG?}HriA_!)s&DzQB4U0JOLGElrYev_tQ!kVU%Z`BaHTJ zP(lt&2k#iqrU3Sn62^KGZ6zsx#(6dwQkG}4A&vKJGo*>03PYOYsnn91!54V;7}9jl zyM{Ewv)__i)yeW>s8%zji8?nj2t+MZRNSR!lRD2*XQ<#~u3%w2K6f(00nYsH*zoQ+L*+?j zh!Z|C?S4^XI4S2wo(U<(ic-cWzgE|Ykb_5Kk1KvEq}4*TD%@6M_)Z;WEC$#ZfA#8L z11aTeq#zN08|11W9M!93nQ95v(((o!6ShKb%kn78|1uj1XzlrS<8PGqZ#|)&Lpo$* zD;s~CWv8M8Xr}RDPm?y24EZ}xlNeL}-s6cfe}8k179Y+ip`nVY@9;J_$GA za}E2|aIZfXW~93p4MH=0X^8WFtM3)Do4kizp6IsvUQfy2f!xfHzX#cC$UnF|Ub?Nt zE4%kcx&c-~l}o=PQ~R@@Xj`eaWIw~UGM3-OMqld3@lrFxYpG|amUX)o{k$61&ERkJ z3ov_d@2YfaZ^i;fsh6BmFI&VbT3FGqD1H*HRn}!KmGoytThVVQ{odeC^qY0*2VnaL z3i{^5WyMbgAq}U9e+i^&JFE9DjiTREws9UszptmaN`K%|TwSL2!*7Hl8iBnmew8%# zH8|nXBrf(nO2W^FkTkOW2Z5;S>8)14`<%WWVm;pNbUjqU^K=PR!~Ftn22`Ydkv0QL zt-^Su<=tUC((=A!Jks*MOpmlwnVoi=iU3O31z*AQuZHKu+AnqX>nT{_eN}s>s(p>T zQ^M=ygA(2#9|j~rBiY!)6wk@VD;C*6HRZt z+v;xle+RDmyqWf_(&hbB$LG1Ibb#&vmGGG>RW(@&pSy~ckdJC#xGI$4%Tf5!RbeX$ zSFiUgSB1-wzIN?|7qjTIsuUIq1_4fE4B+&wU`nNJ>N1b_H|>~;A;-uuB^;+qiV}V| zL(Lx)YE;gj6l#=kg1*_Lgp)4)4p0fzF5`8)MXzI3j!m!QmEfY+@k(&J^&?xn_IW+@ z)>h?s-R)IBDWMU)!c{_JdN;2|J<6?TDqgL;(e6amWfkzi&)dYk+#ZU5r_3AU4tV-R z!G|*V{5gPPY33Y2p_$vF`L)UAec9+N=yS)1UDR1B;O?d_!EdN}Uvc@BnsVq>dhV=* z*In(LoHty$MJne_R|hBOEth`zsdC+lPz~Sf(rqn5r{8hGKDZcC=3p1Q zyw7R>??)Z@PPeM$2^5}p6&o`s)tEu4bf@jzugkuR>i>qzm-E)x!zv#dDj$JLJU#^r zKYnU;L3~Ufx<`s?eWnv5TlX|#Wb0l=jBMQ-E~N28p;SwJloX$dDeQ>&DVUlLr(v+x z;AW+beg=qvqYc~}E9hx+o{I6fX4|9^bhQ~8z96(221Vo1O8f(84@<|Z)4x!>6f@Lm zCyHn$UY*`SaW&?u)8{DS@{9itQ%B$w`zM_6XxlYCsxOU$OTVs%z|{)S@OV^=KMj&C z6X4Vt)%|UgW7Pxc!9d!c9c!DW65}%+y`P&odcQOSz4$z|v^uS_?#dXfFI+k?e!HXR)_y5H5BfC%YiQ|KKTNSll7PLyX&k5j zkG(UGZ>mZg|4q{yiUP7#K}0KvfC?=j2ntFUmLi4P76nEOX_~Z=HVIiuK}Ez3*8z9O z4F_>wn0NFQcU;D0T!wL9Mh6|&(Q(%S9bbRXbI$WLCr@)7ZkXSHb3f4B^S#e`&U2o# zpL=s-o_AL=w*Iyc_);JEJ9YFWmn!Vr3i*P!3L8@KWr=dE*&dyHaoNNPrIe0FPT-xw8sOIRG zp$6jNyUUE*xXj`L`CoX2#W-8^*|6%YJw z+9~*@npz#sI^E540#lSrg7h&3rvj=$Ja8`FX7J3x^TJzfuWmJPh8y3irNH@2*q+zt zx7sMKT20~YHr|P_2G_vVepvJ8DkYEDq~j4o$0IfhXo=#s0xbb2Sky!l6t6g8E2{ER ze54AHybkDBU=~jFdeKdk*hFu};ECRh!IQihgOBjqP<^!VlT~DE@NPh00%BRK3U8oU z58ebR+(;wQ<#4_5MjFR{kAa)$*5$JpxVfNA4Om}c;FbbCQ{3kW2;55ADll+Yf!=Dl z00Vay)T%h2V_-AgEIVj21Rg9{Yz^B0s_-a$&NKLCIM>?*m^*9OBYf@8p21JR`Q+i6 zzsCGk&)~mg#TkyS7>+)$hW*4+fAI`1fW$MJhwlYJEj1VmYS;(};{iJwgGZq#Y8XBd z>EJ2ww;$e18#affJOzX6Q7Qp{l$73Uz*aVV4Kn;=^*jat!m;;XG85;=2IF0gVOP?n z!p4HZ*TT7Bn@Sq38jkluhNJlKr$B`6Ydi<1!(Qj;l?B=-#uhlnvWES@64w6M+n;VHC#vsDQad@(^PbAmNAR~F zKG>jS3I}vUFH(aU&`nhx9s6+T82C!@;U2uA%q^bm>4uXAEw!heX>i4Rs)nhh2H4*Y z>6F@PTC&yCigyJDFNMGTZ~?C^8LCVtONJVG9jfw2Qril!y^_?n0!&=D{o<7#FAiIj z-IeOQq{`QD1!tbrr7ZK1#40-eHM%JeUQo|2Z~qQdoqP{ z?5B!4!)K^)!@25SrezhMXM5GCa4~>}6w`L1ry#9knkXnxvcCeLPMYy@Pr6+AsI4#W z#g~WjNhzGnLlcgGlVd&b2am!#>=6wYU>(4~T@-r*0HypcK6wC68YZyZ(oFVE+b zCOA>4#Np()li?2^4fk`Br%~*e0jN~A!O8s3;E#&A9ZvST8Y=@GP~oh?a(Li3qasGW zK^4Cc6Z&Tz6O3;sjgaHrRH~-~P$$2pD-G*G8y>|e+o!JF0bqg8Fa^uBc!piH&{NwF z@Pf~b4618KddlG14uu;Ip_s)p?INXb5&)IQX&AYVE@P57+biDB_CaJn;srk&7cm>f z2ipa3u?Y4(f92_~c0U(9ZKSRgRG@ zY{CDZoV{%ruW}!-yYL&8g35Q?T;Z_cB)8RG_f2_k%4u7e`F_j+Z+pfcL4%1>{DTiq_k>D^b zCz2ed^+d{p(|*uL3yQP{w-_NzD~fhbpOzHMI81Ab4i)a~3cV+(@kGx%DUi8%vT|l7 ze2ORgtLiH}*Esgz~pPgRLw{jt1%@+b$uA06gb%EJCSU-%20WFl`eUh?oez3j_+ zj{{DS9lxDkr)SUJ-gm=@;Ku~IpRI-^J@M||qQ2y>#~cXYXsZUu?kB2m?^}y8%Aha3 z=v+@g2QaU6ii?YXds?lceT^#A>|s!U59xi>)ca^g@1q&Lzi_JcK8|`DRT7_MS_;0} zpIXWrqNThcTEd&Ea5637EfM~U2*2$)0Q%5O`TSKB{x;9KS=Zn5;4~oXJp{#IuJ=7p zzlLNL8V-REJv|nBPFMv&)jyxdCztWb?Qo)c?0ezlxX0iRAHfx&6Y0Ank`*u%!MvAXG@znflXTJF-qx|S&_dqrb%Dv z$hAsrwmBi2trlb2!Z}_wgVcFAp4OMe$HN=BEGw)bczS0jP@e2%H@I9AAF2uv^3X9C*4=Pcyy-psL0H!O31-M)k`*z6D(d#4A1C7Bw7N zYB=mV++XAAPUF1QHTJWG@YWj@F*DzMuF(7ccbaL=z@VjM&%e4(LNA|8UfJ2%=v0o7 z-?WtHluyH?PnE{bPA(Vl%oZ!aSomKEGhE0ZDq83{4%Ph1^Ka(3K8%KQTz#mmAzjbE zP!%w17P>bG6@O9Kf1&62F0)W|P0d1&r&;LkYOMk>wo}#Y51?UxruR@KECryleFU6z zotu8+`GvXZcOICX>A9(;=cb@yCZ&Km+7~VUS79%(cphNYFans4Ie}KD*LqTd+R&{Ow2yt-Rv=L;uY^|@ zOagIkh!SdsC?=OQLmZ4>zZr}-%m$AH->G?Nfp4AK6PNijZKH;*S1yxillJo*-I2S&Xbqh6_^Vvpmy3gQjM*FX%$`(Xb){_BDNdf>kv_^${4 z>w*7z;J+UDuLu6?fnD-Iur&~EE@=!TLro>s(Nw5)MBT`eSTs~#TU}CBTY2!orSQL` zGS(K4w1yHTW6Q>l8(lWKtYieAjfRu4W5$+^8EKV_8WlkmC8MfKN?T%Wq0&IIWmzN| zDQ(AC<4VJ=p^ii#>c>B&t&zskKs>VZ!l6`4C=m^%c0NWj5k%op)j6$M7DDS zDc-ci9|)B;rX#IQrA>)Qdnl1~Or=XS*AcSPDGkQj+G5etVB9%lPD$n!*D3YV(WCKS zFtI$Iij~HKsZcDM>TvA_!=_!;s4U%S19n=F$~hQ|h9k{8AIq)0_A}PqMT>yV`&iJip}K z#mt?u`za4sMRWjK;9i4+CAhpRUE0_di01E((tMO?dvJIPwTGf9*Mpk-SVoGe7We77 zjFU<2m)4~@hZ$E9GU>o{2$tcl1~ivZGHJEI^4(oh?qXz8N=4e-=E`LhotD|c!pYV) zwLP$Nn*+NL)gkTDT}s|nY$pp;pWwcm>Ea9Bxwu#4WLG?vNCjL>61y7YRzp`yBH?&* zp2LUBs5))zB@=;VuKO&vak}Qz)gsh%wX29Z(}i6?*q_+>PDZ5eHhNbZ+FkkEOx|70 z94W&R%EhuaD`|I89nyB|ye<~FRgi55?|Vi&mbfqfydpcMPaBmu?{Zb8*&~KE`KtPN zw!uyab`Y*+4bJA}qirWGgkAc)np9UGl96r|?xdYAXGQT4Y zoh!_E-hHQGVP5LAjaV0<=_+$vwfnpy=JZW69Q236c}ygz+i@NLm#k1r<-E&>POoh=yazD}?c&;%FJ zbKBs4Ur&0%y@uSDxZ7iwR=A6u+k#{&5X@uV$>rfPy0$@$+wRiMBT9CDo7w`U?phFg z+kMPTE+MY#!N6^tuK9G=PR)F}i9?ILQ|v|A!c*lCBS6WsSMSj2fm?`lJ& zsiP^sl#@%~Hgzgrx4Vy>Z2>FQ2KYRq=ddA> zM=z>UcM~y3x+!>YEfvXQ16L*PI(7~V+T-r4yh_|n#2o2%G&j0xzpfaNlOqO_bd&D^Vn4HbWF<0xlnYaUH3vZ}XdLV)?p@nImO)ots&vL3dFd(ssFG?_z+<_+71V zH;XmXcNa5v$}T3cGHDl49nyB`yDkQ}jPGPcK6iAn?xX+5?!p~i)Dap}R#vw2y^HAr zmr=XsUMXAJK%EAP>O%h=8qltNDYO`&j}GZBcbOvyt{ zE}KHBJg4U{uW}RBA#Iml%`Ou#z-9d0R)j;l-~(5YbETi}`Y0526Eky{>ZL- zKOBg(CIjI-XTI)ZclAQJZA@97t7Df@9n#)~B2WgnjNjFY=Jq_@?bY0qRRzFDG zW$dmNw7}Qi@@)AoqdKJRG6!bsi}=ddE09GBm8q{UUtt|>=QWtWaK z9goSojGn`WydHnY8RV`!`_A$Crnml5qdSdRu7F(Zimn`f3FccV+(gWouFEpb@O=Fc&x|6myvHV&QFG+p z-BwFhfxC<9koK-pPo%iI^kZyl)>xUB%3uvdao%);UbxW%L|2q+9d& zUIA9OsH>P=Q+EICjG1}&v7Ie&>BL-SxK!a}i$9cS8_@1>6}_ts@q9N2Tt&>8u1o)! zMF5GrjNR3Or6D)3qA*i;7qe^1?w;K;Q+5}#Ys&CkWqw1htB5($jfGQr&$p6pBkT0> zZeu(W55c!i)Ew;-`d)F7pv4<#mJ z%y6k9hb`_FPgyp&i|UZJ%N%quz-9cdR^a#b{BEc1rWtuD$YDoIEa{?~%(B2;RGl_9 zrFM4_^N5lopOHi=-&JnA%eXmGZ|i`v&T|90-EHLT^x+%1>S-2#W4y)1*Sff*^Nj9b zLvuWzLg=)?UG%Ots3#lz!M3J+R{3Z}UJAO}5l!Xsb{b6IRm868x_{2stOo95XInsD zWNQqzTt2fYOEhC)KH73xh_%=c->A;pZSEEPq8+>3CkUUhdAqE4XRJ0G*)BVjEY44- zTWj;^5`NjyrrCKYceH=(E>~8U8h+UlSC63P@R%~jm6CsBPu6W~mqV1JeY>L6wY_=N z78i!+p*?2~qLEZ0mj8^xZS>qWxVph2oU|)aBWOBY*cgAA=3i^NA=KS^UjMccO`k%Hq zKb<+PRo}Bp<1ZZS^w+aQ4ah@-wge~oiBK#7d(}IicwUim=G^U8o5;4?=)YhCwH;df zxZJYLY1S@j6qfQka(1B-=da@5*y8@hi=FP0Hn~@oZCfJL9O{5|;iNnse9tGYPF*(# zNZIvUCsdlQVrA#I9VVrvk$i3~yN{VWWtTTbxa2u`m(g?B;OhQ(R`RZ5W~ZFbjsd5g zPuyIoH?=mp_~v4E>h9v^OdYm5c7DJRsk@5nlseDP^dytFCU(W9UDfDhY5v6oj&c#% zG5xL?bGdHsT7F}9S!YgblgsihKsQlyr5%emxp)L3+avDc=1SfDy_ReX+{e#pMc(e; zW$)+xi%H4Zkl2F8r-$YYPH(?xC-IN0HCtEo#txr^>#Ln@tUjQQO( z`7U<2SD|fzs=xCige&1r{iV^Eo99!pF}jP9NvSyzh`aoe1D8=UX~mn;Z7!aX zl1Z!4&2P|PO0FVg(uu=Mecb-SlG`|$)WR<7Ua6}HnRF6v({U9clTIY=>Ru(5lglWX zwBoU4Zg-emM#-cFdx?#16LT9UlN!EzD;iu5@8nFmc<}`~GryRbl;Ne{?th%lb)-ys zC&n7{$ff&OnG~B7ZlBt96TwI)4!@4+@+a?_UB=0z77Dw350|S5nRJ>WNvI%==~T?+ z-fmtIGwBAy&0+YxURUEZyqV2qq)d8^aQhHnfaksi<`*-QGCW!6{!0%3E)xGvaqAeE zV&RiG$vo~WE6QGxc3@nc|11MN*m z)9|~`oe5}|Lj%f&5(%utRV6jE=g#m?n^Rsfds-ES=hv0b@z3?w>2xtDX&Lo<{ZM zHMO&+mDkp0co{niY3yevBncibN(0;mq+LCM#B#~ zm#SZqPIUMopTW_wo&3S+E)k(9!|hO3k;Who!E% z1*cV1`;Rf>9^b{K@5Q%I*G0lQzGq zx(=dc&Z~^`&Jv3+N%@;12`x3f8Y)~}^_;3{^ZiiTbE?Yg$Q9<5+Pd<}nf|gdW4lJu zm&Q3=D6gQ3WvZK_B6W=drX1Rp&Z(VO52=siHj}MMUE@|}Uh2$m5Z=TYfjtmt+fAVk ztEOV!bpO%Qrq$}R>2=el={APHsOyJGus;^>bZ8~Cl$vP`Gv`+M=gghMl_~=(W*?3H zXoI%ekcJEOmF2U$#+Wy|{J1XCHFK+gH&oB%+L=iqlMT942%RBVnQDnOSva1>5@>8^ zmqlF@c2yIp%fe69Z15-9P&icH5rj`a%r~sIKyrycn68CO)rOj63jpf-#!MhZ>O@7r zZNhq$I7HGaf_#=>WiYeIXvRQREOiwl;Ynv4WoIbR5k&LU@55W+7G-EtylIIab6`a) zE3GKzLI0iCYDLSVscEfk4Rsw>v}$&FV{&>TR2u^qlv`2oYgV{wb|w4}W+(w7OUvt~ zSI$8ZiBhRZWupZOzy;jt^QSTqi~<>d5M~~Y@CI;yIBKalwJ_yqv!HF(q|uZL@YAwL zQ>q0M$pqqwKoD{T`Lm+6cwPyo)lFc%3e~3@gZ1!Yad<^8k%gf|tTL8Jpd6t(nC!vQ zCsiK;kEm#Mu^5DwX7ped>r(-AnG(S8+;BMA8DqL?78n60j)_$L@-`@s)JxwSku-!e%Ho)XX;5fc$|+Aco<)^JIF@J&q|iB$SQAdHmg{62K&h2XH^#`c zbQ?IJGLT3_LW!gmtqaAe`gVFP0)DBQJw2SNkE{rxYxxvw4jWN5yRHJF&r=@_fu?pp zbOcSUR>RnUA7*K0D9~Ys^tCie>T4W=Yw5UF0T=KzFb=ip&p?OOFeXbohBDeS*HB;P z8iz1i8e=@U}&H^3a6=#rnFvPC~stH zp6Vc22UJyf4Rl+GTKjZ7uS&;TLmdq`Uy3#~HPxyHVI|Qqy7;Upc(5_nszl&-rb3DK zP?Ihvw1j&`-4k_chollveAq?cl?I$H;z=bmI`s(y$jqjMQW{x$oa&a~vFdmYWZfd* z*CR7y3Wlkrp||GZb5bC#Ka~ks!&N4=iDU$rqe@v@qzha)DRUi!)eRs&>?2t`_&|@V zh8+HcFZ1DbSZ*a?Bxr5LURTG0g_(s{;WO(hRB>qZFjiEKJvMAXD4hwx%Eh<_A>$fU zBY!L0RcnR8tplGBSIb5{=fbMcm8$Zx>e5jxMd&MQ0`UrL2T+P!&6AxKKAEI4$0>bO zSK0ui(H>G&Ia8DU6|q>W_Nu;)%~DtMNGPf7fni4r;5eyz1FNaEGF}UdvWhe;X{@#s z3`NicI+j|g82qSfMfkW-q`4)Pq_z!>Hgg7zIBK?HRgGbqKqUod$#^6>I~H7GwZb2$ zmDqNWVG!mCY$lA+bP8vkvy;{s3~72rHQ`X2Rj3n~iiDc{II`=r%1RiCg275m8Yc;f zG}dCS)xk_fR-GO!K_j|9^pB0=grtM|4D>S=h(x-yz$;Kf$?35~RV(yxT9q2~aApl9 zM+iqmCaS^*gY0VPGf{s{x?B|>jJBzC(rQavFx0@eor9?k@@*{+UY7b>Sxc>4&q~#J ztt`P5qls8pNmZ+wWW|EPKvFG$t7&q8+3B#BTalz{tJon}ojs8FQWTI$W7bv|5eF>JGF%)Z7rO2+asZp>~9t z;WLE0P0+RC6)2Tt7ncD3ECL<0g#}Wx}Br66|zAARL4tA=(J7u{mj}iC_$RfYtznpz$_^lEFkIj?>|A zB-GlJ9AoL9X3^`?R#?Adf7?2aKB4wuIF*KVHJ(JGkSBjA8HaDEccgGnBNZdaakU6* zpb+W7HB~FPN7;)f?eOa;{!}nx;V*JqiDc3W_EnIqcqr z!|+QMuxACLLFf_^$~|gLqGeMZfu=wlX0G51JtBYvJKVB3b&?{EvXjpL5l_ZReJD-WOXi-NIVu# zVlYywi{Q*yJOC9yN@2>_sdAp+6Sr5CVuNQ|*%%zyppCS~0#Ligs`7?filx?isQO4H z;Z`*?n-!L-6@I!(0UaX=FP#m?bjnz3z(M$-t>tA-$_m5QgK0O3`jfCF1`by`uqdg7 zVSbrh4num=a+s$=vxF*(S%X+svLYRZZeuo<49?zk5SlihM5nce+F-3VI~1*sR;Y;@ z%E7F3ZkR5?yiZT}SsZQpu5D%g{xqK1C=#7eI|_3U1KPiJB>=5 zaf|*P)DU)v6R+!Vy3&yAN-Cx+j4oiWD`Y&||df zrU>IN4x#uFvSQ1iSGLmQ#;R(As}<-iv;d5}u#B`|WPl2#uRvlj0ZG6#n2|Lf1}7u2 z>Ch7z!G=IH^nNhC#D!)n^#$+=Hxb%#j}3lbtPN(IDcCoK2?1tC5!DnCzzR)&;Ib;+ zXariJ@u%xLAgy`v8dx4?0(_eg;PiWz?Yql#g)Uq0eA*mCl-B*$>uMHdew#xb2X@{A9${B@4$w z=u7S!?Yx9-Yb2Wj<&XQ%LEd{3A{>I zZ=0yo29T`Ao=DB0@Ny$gdi}87p!^H(v4FmVDR>MEN|_BqnaWls<3*7@Z75)P~snwg^o6afX*v#?fM1PsBRl zqCW}yJ1Wt50Hy(|aAATN2|{H9Yhc-}XDwEHOwqi>d?5T+Rxj0Gcrt*M>Mc!!)yLxdjt3 zSkb`}66QoO!7xH<4W;UP(rSk32Q{-g7++yFhjkcEVXE2+n+zR(oMYf8{5V%49Z%t@ z+FOU^z14tAEq`0GIq6RX+hGBNV!9>8TATbvFmvjU$CEggn}S9#bIO8h_d<$iL(rZL zDD`Xzsx?qe0~XT=A}PJX1Sg>R*#ZcJfZE}qA4F7ha$WuPG+cosY^)f;APz|;h(y(n z4bDBrbaLIC+agK0Q;IE!x-$m2`~hQN{o%(gDn5sJA8C2Zx_&Ly$XtsFNyhs$0`% zYLi=^wguv2+rt+2QP64OW*y|+55IWl$J^0ZKw059)>Yi4pk50G3Z6WxsV|HmxI|L7 z4Db#Dbe7nw#uJUuo8Zu*Pa{idvc&yO2H<>Bw{V@1)`vZ>)ffuk&T%>ff8hH(({ciNC5s z-MqAFB`_TWoATOCrpus6;CY;}%Mwe_32NS|*F(t`{i##d^I5f?OT$tcMh|c?LM_x7 zUS$DmAi*itHK@M(9Erk_tY?+$is1pKywKj%LNtGb}WF35! z5=z)4G+|cE|&&Jdid;(&erSWt~Tu-yP<)m95T9MI@Eq-QFqTW_Ag&T0UDX@l!O z=)gf!&1m#s17>SI5VNwrTB(lvp*YjD*{W}~(|s$Li{b4m`an6@O;n4~P;42rx3(x; zi=-j}T9(IMGD}s0+wuB}E&>7QyOfZG}YPdlPf^^%dk*X7XR$yPER{f1( z|1z~x3B4z@L)cHC&1xvF`e2|nMEwlLfIU383)8F$UfGT&R5w}b7eXN}Y>0v-^J@K_ z#?m?3TU#~H&w0Q;NNMRz9Tq5RzKxwLZhOEEG6I!jI@cW{3R2W%mAtPG{XjMCwPTCX zyKb1<3V1mtv@ol#yb2~HNvwFdA%{Da(>hYH23D?w=&&G0uB#yojAQ(&@4=lHoF*#{ zeN)C>I18loQ*R+ld(f21TmwOTTncW+ar4!B1f({tbzlI7CiN^#JOxjESZa$(^^=KM z40<5+sA8FI09=p3%t%w*f5J;xqA=X6z6@_yLt}y6Mrau*O^@1S1GpKW0k*IbYG!R? z#!igDo^m_XK}^>|CVbqVfP`PEBst*G9-QE?10l+X+& z6@Ga4omxy=ZHlq~)P@Xf=43%Au`JF?aSJUJ)w_(1$_AKW!c02`L54T_vQ#tl zqrY)&nER@>Of?}`N~a>t{zi2RLz!VFszgknDg(|)IMIf zD%;Mc7|!)zk0a>ECA{8Bg&ZZ}Ml9SX!og1$D|AFKPme@{3AI@UBXhPuR_;xeDod)O zsjYRjHWI=(DU7r$$kk6ZYQ5jv))?2<{eINdDScek%!PSzqo1`gA$!hJ-Ivyx1s!j zcpRVY)SPbTK&jx$Q9nr20;4G0iPv3lO9*a&rD5k8X5vd>^n+hVS0gDbP}FB=DSmVo z6t5(}4e&)EnAO8xc($e{)|BmE)h6|#)oO$J1h!+$Y8W0jg?hkOBAF}M9?GE&`~Vs< z5e&bOTeAun>V)p*O^P=q^gbUB1D3zh^6NW1$~bkKr_;x@-vzY?N?NVyOiij6Qa)ul zHLHb5Xcp9~N0_2$tX7UNrl9xH(OI%E`#?c6l_uEwh5Z_|4(?{tZ3i`|S62FAMh1@* z;fLDbQsqaRUFsaSpCAo2Kf)WSK@oV) z76{(D(A7&1%X*77UZ-YXu1ilfl@lbA3p7;ti@ z_esGcxJQ7`_He0$aMwVYtZ$XUNa`PB>De_ET)YzQ^FhliLVo zl`_Yw1~0dcs2f=Vlj!o=>XNG3%7YIsh5scuF~gfqC1cCRjvHMzx~yabpN)o-v17)T zjTvd_qd$FmR@7OZj^3VqdUPvV>#?i`;QP=u{OIsepuAV_ie3XMdX-f48d1@!ti0F6 zs$Q!+r*}KwcY%Fj;jg`C6?pHpdrd6wRi*?$41{}^_bNg$tv6-p-PijIdTX=P-dB)I zZF#R+)X)U~pCeWHaccnua@m`$_cV`#-hw~$n%~xIaYe6|ieB-VIvw=Op^y(gKHK?p zUdm}dDVhwQ=No#@Wd-cQ*%ntnbl)_D4 zeq~H)$HWQ#35Sk??_;Dp@bURl-Ta^{$o23%G_r`L9(#iKI9a8!IQ#%1wwqFDG;paD zI|ghjrQAT^ix{9-y%-hlQ%9Ri$4tN$#K~KxEs%RygeOP0pq21l4bVIaC-qTHRR4%; zLf91;9kjqv%U~N8R`5x`+5-!OR5CP+D#ebQ&LKWHLdA#OTHHqfQb+{4AtMB<8OVnL z)b1RFZ4!qL8bXjb8JMvzr#1MxE3`!U3?hOZIpsouR`y9L&A3!NeoRJ3r2z^@K$vW3 zJN~UYOdiUmErxz{N*_By?J}Gf;F{zYgiT|~&3Ff2#{j>;qzulXhs$Z3+N)G)sWTl* z<*d`nPWQsaZVqa)EY?bLCWppCCGYeu861o+*O5YPunU0Szkwi_3}3Y|gN`a;Y-xpW zzo~qvX{Xkfj>6Vy6P$zDI!`#^g$k?cj8*8hx^oM+yf0fGd*E&bQ}?zHE;_?5@~yQ8 z`kL%Lm)pDhidNhGSKAXO+s%{h&|0`Q96>K_@Ii9>fPzW0?4GNA1tW^> zqb@4!XWQOYp0$NudtdLlp!Z1cvabOS@Lu3qYwz#7A1(~?d4E_r**@@Rd){2z4+;i; zZT}js-svfr)YsnV@f~gVKN?al215_H#$0uJfH` zFM{Ov{Mx?2Gt1ty;Gn+tjd0T6w~kVuQZTW!H{D6CXcUZK8oB6UYP`T798lYM?ma@ zA@)EWyJ9qC=E(V=;lSG=LzvEROlPIX9uE=+q)^#%t;)B+wtU`uR?fFQKJVW=;2Q7! zrxuk!w2IYm4*FMk>`A_&zV?W4K@aG;3yaNKvwC-rz58wj2M(|ce3J_Y+TDHLr_*Z- zi|sLEZTF(la8l@dwXo3ciOA>u>7>;PU2FI8d2cDa-R^lGns8ZqHALIp=RIfl zYf+iKhi{$T-TU6M`A|ZycAEuNrO4M}cZ1R^gc2=E+xx+3k*^dq_xHZ!on?Dpv-?+r zjw0_JC(p7Ega}X%8%DndTK;$WEYR}254G&!^NxZHc7vkp0gC#bu1@#B>g?UHB3xML z{k^@`_W5S%?A+cC2qM1>wYJw4aB}c0-(+7D((dW=?iPkj%(sgt+rH6uiO>7mNnyLd zd;O^?yN~yLJ8bv#zI@VZFme`{1+IDcWJtKD_oZ%7f{s~vEGsJyXR=b6D=SBi&Xtn_ z@0A^4$j=Usksmbh>XYv$1ABV6S)<7`pU?Zgw`elt1j^@uqa$nW3EsV+BgUSx|7d%{XnP+}JlY=WI|RgDg+BH{xb{AxV&5Bf zpE;lc@(mTV(?i%tzj`wI$$NnpI+5|-17_KMzzySnwkO_gmqCoakXUc!1fT^Y``d>$ zFR;gg6Z&|UV%N7%!C{_ubnKlc7mQGjebqbJ_8eWXM;D*G?e!FPxA))8dz+`|TIgPj zyl<^6npN1{d$#9VNNK3Axo{A`vrk#;?en$j(6N}Hz7Ddxd2d(=l5q9if`XwQC0(kd zUq5-RxA$t6zPwqsSr?DUV-dix;1I>QSE$~ zg{s)f2ip4;jZuSG59r2y3+J$Bz1)+sulE!T<%&Ag7lAr3*@n`^0^AQvc+6ybA5}o3q0IJz4r8FY-p5yG4+hab zqp@Uqae+O6!>;B11N11+Pd;8)G#@HA^!vYB4fS^v*55Jqq%WZU?k?*u)a#-x9GNuPJ+Q2-1c>0SQlhg7yn*&80U5?7}C%7&4G5( z&F4KKZ13Z}q$33$zQ_Za@_xP&yVr+2*u6pz(g=0TyA{mc<8j9R zYUnhIp*#H=`j+{!j~%`9ee7z{$3hf+;8vg?Fplc_qWg@_CDGkbF}&DycaT=81_W&*~U*BWYs^yvYR!M;ZM^1jc>P=C65 z$Ff2opNpfPa`921C*#db@>e*>zvZC+7zcaa13i7MO#R_~pt~LP6aepQ)F0l@836kG z8uf(tV{UiQbA$u0b>NRHJ2M{Q{hC9_C4=D;OPO;ro%kU5+?&qvqXz8617&%O4#WMZ zNh3E~_w@!hc_h(`FbZh@UhJMq| zgu&6Cg_Oprf?r1bd@|0@i6bCkcs;FvDo3%Fl!w&y8B|NdkPetcudW4UlW;1OTehXlp# z2cKp?vx2znXWk`_`7-;HfKiSnH|sycy{Q9~@~a&9 zmj*ZcpG$jY>^J%64tyakIWS#Q{z(TufhGr1{#FORH+3LVzR7{#?!doy;74NPhePT= z!-2o;z=u+2D)mGh_|*>lPY%2QJIEY%j(6Zo9rzs%{1XSh4=qh)zUDgcOC9)I4!k!l z9i{#%2fobU)MS-kUUcB|XiN>k@O?++)>H4m*EsNp z9QfA`eE8_x=^pRE*E#Sf9r%w9ysR{Lx*-St8wdU;2R@=KxBi#||DyvxY)o!F=Q{9* z9Qa;ibL%<5f!}ZNJ#B+_@Z9=a9Qd6M z{96ZJcSLUeXFBlB4t$3LKV))l{eB02y#s&Qf%6(|H%O+xPD=gdF&a5djTNV5lf`^C z#bFudBTv#7_NME|_o8$B;5`|ZZzTDHNCr7h;kS0zfV#IX^W-UpJle3=Mh#{PzJ~NS z5XX5S=LJy{aZDGNJ}*#)S`3b;cAW-EgQNVfDRavVj`F9HJ*y3l@_#4!vkZ>%XOKK4 zqx_8W(`fy0sgQs5d=1tc9OdsO`5O$5`Y$5=cNrYz8wYCedxN9=6(s+#!BPGrl7GzL zD1RNvKW}i9pH3Cw&jv^Nn@RpJ21oggB)`qzD8Frk2A>)n(@aFkzhg$CWRg22J`;W3i$X>gQ3o#Y1?9QE(N55|T)OoOBRgJjQegQNT^lIQ(u zOc&)pCjAqH{9j4_aD$`#6QrN_vDyA3X?;~KaTEJlGG{P`d9C$B!cTKaawn3i-t(|Fw`mox(o~el3OhJ_Y;vE3&gk z0a}x>=Pc5X_m@rn2jattqgu4HR!LdbB*FP6ZI$4cPsi4U68}W-%ZPU~_U+N0JBSYxd@J$M z2JcA>KPD4rJLgmVnJGArkMj&YwDqX8g$#MDpRETeY()%?^^?cPw82sSE0SMsaFplq z@l1oG{A^lho?~#7=kf7UgQNUSB!8vBQJ%-gjRr?~FRedsF*wTe_;`=OQGN}{-)C@? z=kf6m21ogKN&Xpwqdbp~uNWNV_oQ{{8wN*t9v?q2ILaSQ@}C$S<+p8sKX80!aFky~ z@;eNU@;pAmL(1yFdV=!zkbHN8qdbp~#Rf29Fng#ILh<*IM3iH|1ilfFgVKd_!u%c%6~)h5rd;VkB@1C zqx=Y(z%Dm9%JcYmromBu5y_upaFplq@lu1M{6!>xrNL32$H$EZNBO5n{uYBPdFmhT zF*wSXl))c3?lU;b^LY9PgQI*i$v=e@}*TyTeje ziVpV?ybtlc1TP^zMDXz|wVs0ouOj&|f-fL`nBWQGQv^SUc%|UKC0;G~eZ=Pq{tEGV zf`38$SAy?O`3eX=jCiZyZNyW8&m_J=@CM?m1Yb=2Ji!;8s{MSi;44V}O2IE7ex2ZV z5#K2I)5LER{BOj6C-{%V?-jfc+4+#*qliB)_)Ow22!1B*9Bik{6oQCr~G~^_{YQxXy26m^F8t2f?rGe_Z9p`;)e*niTL4y|B3ia z!QUi)tl++Lw11ie?@c@*_#on|1b>+LTESnYda_>dJucDdZW8=a;#&m&miSh|J+u+K zP4M2tzZ853akXIsCUCiw67P+`;71WJ5qu8uGQk%UpDOsd=V-mPf?q>?vEWJ46Bqnc z;;RI|fcRR$H(##PT`%~%#5W24HSsNiduji3tKdC}Zxeg~@h=76k2rq?0x#oycqsAS zyK8%yA4a@H@Dr}oa{N3V%cqD>74oMNuNC|j;)?~pmv~(8w~4P3-1{4C&sxC`Cca+q zBZ+Skd=~L7f*((OtKf0s+XP=p{7b=4qWZ=UX0zYUC3${ck@7UB~G ze~x&S;5^T%6P)Kciv{O-PE_y$nx~yCcn{*|3eNMoD+C`!@;3^881cIWpGy2O!DkTP zDtJBdcLZ-F{+Zx0;y((0G4bwuWS7@_#P<@s<}58YOz^)DA18Qs>Q~DJKZ^KV!50x< zB={2IO9Wp|e7WFf6F*z~zhq6ug4?je^$@|GnVziEk0yPyBho!^Gbdd@1pd1V5Gdw}M|l+=H8#aBzQk z74cqz-$Hzl;CB-rA^0Q2#|!=x@e0BJM0~E`ZxcUW@K1?H1m8itUGQ#He@+*?FY&d4 z4<>$%;KPXDD)=bk_X<9V_!EN9BK~K=Payt|;O)de6MPuu_dCIVruqzTILRvCo>ZUr z5PU!4`v^Xk_(;L4h))oF9`Q=SL&R$ZZzsM;@Uw`YDEK|5Hw*p}@jnRuKJga?|BCou1^Al8e{#A5i1!nGJnE zeD+1!o}UC?K)mPP+2s->K3MQJ;-dsVmDy>&-^NdA%7GoY$Kx1n2eU z1A<>p{m+wvUrqUXQSc4K-x2&S;(r(XA>!W){yg!5eX`4C$AvoFU+^!9?<@FAq~~D4 zKOsI*@UMwa7uPv0KOz2!;H>9+!9OQ?eqY3H;3k|(e?`3SzS(~JmUxNa|0F(2@R8^1_(uso zj`(cBrx0Ht_zdFBf*(!1UGTZYPZ#_I;%fyD6Te3ANz_hn6TJNbov$YauOj((1)od& zE5VN??%6Nf&x?rn5xj{wzn6o{D@uHfkUxodrQmCb*9!g;@kN5aP5eZ`KO}y#;O|hs zbcx_U66g1au>F0g{@g9(_oi}rNbsLX{*QwDNd7g!`xAd(aNaljr{JR~Usg$Wxhx?) z0|bu~KS1ym#K#D}n)npKFC<-<$Y7f*(NqQNinpKQDMA@izp2i1-JBKTEu5e@h))-~LGU_ZFPXcOSvm zk^G^8Uq*bY;8zi^5qtyj1%ls6JR~@m?^40JKCBk}Cem}E;N|3pD+K3ya)aPyB)>^; zw*NuFCzJeZf^Q`LSHYJM|5Wg+i2o$`8shel>~iFOxLEL$NPdXmXA&PRIG68K!HcOM zm?=2h-yk^K9~QiT^h5<``&SCi_May>+kd&>Tn{%0&iT4aa4yFO1b>p6YUQy68uxz$A}Al zCCPUP{w>L$A$XkR*9y-2T~`afisWw>{2bz&1z$(}kAj~-{42p5i0=^GL);#g?Vlpz zeFX1Ke6ZjXiH{WgDB|M<=kNK}3qG9Wn+4yCcvA4e#8(MEl=wQq%ZcAF_!QdDc}(!1 zNd5)EdyxE_f)616q2Qy5_c<`z&r4|EW^cjUN&Y~=*AO2kxJ7!V3cfq>8o>t=Unn@2 zFTX#H=L!3fd`ie4Li{wr#}mI$@CxEr30_0|X2Fjqevjb1pZt{IpOSw*5&U)HUkiRA z@t+01ns|@l+2wUJ@qvPGB7UIY_Y)r{_*2BE3ci*2$%4O1emLEMpC|aANd9ucUt~WE zzTpy`&rO1#PW(Z^_agp+;A!Ho3LYZ$Ja=|xTuG2eR@GCFXe68R&5Whz7yNKT^_-5kw3ciK-6M{cW{Lg~FM*JPY zKO+9A;9nEpF1Y71oiBT2wx4?w?<@Eq;`<4H5b;9S7^@6`n{4T*iA^woy+lfCbcz3FAZwS6W@s9)_OZ+>* ztB89K$}Y!R;(Y{PNPIuRn~9GSJVpEn!A~V#E%^Dwj}!bd;_ZSzL;N+tYp>M#;rD#( z2Ejey|53yj9GsosLx_h2pK*njyG-x_B!8XY$C3PPf(M8{A-Iq9JTG{dve$52IpCCPzfdrfeD9_Ay#`T3c`QQ7{#gY@?lJVt!5 z;QU^cQG)aPPo@aYcGd`fA?aTz_;tja1?TltN^o9JohA5*RG+UD{37Bv2!1Z{KMDRM z@izr$`HuwujO6+KtK8mMey`El{_p=A9UdY$%P$aoJju5U{tWSzf?rAeT)}T5ewpB# zi9aED@m1Q+KMCH0_^X0j#6J=Idg5OTK8EFH=Vz_pkCXg0f7Ykey`xq5r0DPPl*3n z@GptKBlvdWp9=0H`?m|;i@05uU0!<tl<2-?(2g8meTz|@ZS;tTJVR6|19{k#Cwd(F2|RM4;1{b#19nw@5ILm{vGkD zf?Jf|8o>*RFBH5t@n*sIC4QRVBZ!|TIM2hc5PS&9KP-5d_)~)WiN7oO8sdK!oaH@- zX8ZYGlJ6<_`^5JY{88dV1%HKjnc#e1Z;{}h>$Dvq!G9t>3Bmi4{0hNY{%paAlKig) zXZi01Ka%9TkI(kcp~Qy?-ave`;M0kh3qFf@jo^*Mj}@HtBn4ke@|OyJI`L}-XFb0Y zd^yQKB=|bwPYTX@UJ-mf$-gJ~-NZi^ocrw`1m|^`Z$h^JA0R#bhTS=XLQbg7dogeZl$tpWg`1`vwJv>3nm!@cTUb2+r^AED@aVI~;6q z^jj-cu2O^V37p^0e7M0;p5J$Qq`^`CZ&WVT21oe?HvEC3#^5Ob5y{UtILbds^2Zw- z<@tS;%?3yLIv@OjV~N30{s+?EE_nAFmAG}9!BNju-84Vb;HYO1$*(my%Ku+?Eq{r@ zQJ&xPd7a>kNzX>&+^!#`{N5?}?OMI{fT0J|-H-D7h`}*ken0241}`QZ__5XCsOL7) z^RmHF4}b6MuLegwo8Uhl?;9NT6q4UQHaP0x{_Pusqx>C3@CS~68XV;hBL5UjRF~EF zxln!^$@>hB^5aRqkHJyCAC*h7!BM`P-K8b>}Ayq)^Vf=OB-_rp)qc->3zSBMV~oS*+WK=8kl ze3{_i5}z#i_r&W3{}=J&1?O~I1n;q4=O-*!4DvQiQp`Mz2K8b{!YPJ z{sF;{A^B$n=X|{)IQ#Qm!P%ex5IjoycL?6?x0X6~KU{xux&QNe9WEA}pFbQTcw)Vl zFBSZJ;*$lxfq1pxj}bps@NL9{f?H%~T=2=nPZ4|t@pA=#i1^ilcTl>U1z$&etKhd2 z|6cGv65sy_OC9XzzZ0J!cnR6FOz;83R}0>Y_(g&TiT_#fX~e$~{6^x%le6u-l=!}a zpH93~@Rx`mCiw1D-^vB&dR`+q*YgE}b3G3U&i%$x!4IT#PZ4|!@iPUlBYvUa0peE( z&i3CRINQHTaJK(J!P)+21Yb_+zA8BPC;t%qLX!VMaJIACl4Nif{`G=?NO~3v&hpCy|C!{^5S;B_EBL?-I{()QK7{zKg7fp?_X<9N zrg_U`gX6q~?Vo9Il)s>-Qg6*RILf!ueC&9G<9v*Ne?4Sy)bke3QXZ&n2YiKEX%t zq2(VF{I|rP6?`KqgX49BW4fCt-46ucM*MSwql&)0Q46e71V5g*b(Fr2;}ptADBYe0 z$8^hR-ngg1QS=7Vv!CFf6CWY?DAGSh@CkiD85~Cv=laRN4|KF4kM^u0dm0Rms$c4l zT3~-h@FI)^#}dIO6Yn6-={8e6xzLbD(M^=@CJ# z|2ES9lEG2+Q&g}1BKQx)|6y>{Q$p+U?+uQ6P9{Hlr$PV@&hP6wXze#upGZE1IMx%? zA1D3O4UYO>A^md&A4GN@Pn`Ap@C1(KQ`JYOJ?E4EuMzw@EoR*>_`Rg(ZNdLRe1`+y zt6VGOe66Q^l^7iJHG|4=q~I42pFrFLve>T@Ya`f{$($`V1NN+lSD&(9huLpELH?a(fvZ<$0fWsKHUb z`w%TZ+~6qB`?TW>j`Fo6f0)5hp7&`h4UY2sy_6XSM|s|-tv5Kze=`LBz;T?xQJ(i{ zg9bs znvj2kT1f^Q)HE5RQm-YhtOpC~2x<0OBY;4FW>;Qai|<$}LKdVVYTHsW^( z{xR{*g7fn{j|=_<$v-D}&l|LV-VmJae_wF6{|mv{{vQNq`|W8u9WEEPzqjCQ{~*EH z{-MON`q2_aDIO!_D>v%&rWhRS=TXBnFE=>WPaeN&436?oko++QM|mDE78xAn{RhGy zI06Poc^)s?436?Yko;1EqdfcV6oaFD<#6}|$7u#fdG_Z821ogKNPeBcQJ%~98iS)e ze}Ch8gQI+(o8S)|cNiSyuN$GT^*e*3{GKHLC~+>YL0a5;)sV+|=2lx@_|V{}|3%XO zh2Z>siS2^7j?{WQ)Ac9TH`FtccrW5?&kikS4HBHT`>dl3J!mH{rso=5`GNG$7yL!y z0l_C7q!T_-aGUrt;%w)oWapKF&qo0`ZZq_t|A*e7uywcKL)L4)Mer#k|GeN+iN7KE zal}6md?E2~1m|>r7M%A_dd$#vasRNC^b`xudWHyo9?6#p&if>j1?P0D1;3H>94k2Q zJ2eW<`(`o0A0#~;f)648pDFljB)?AZH;G>-_}j#95_|~h{~y8md)W^Y$7(}c63X$< z3HjEI3R^E59P2qhulBmZvAzviujSu2ILhxoPV&QQNQm{oo-n0*~F8?xg5E_S|j*ut;V`V@SZeZdQ$MkB>x_9^fTJu zyPLl7h2XWsw;LSozm@FtRO@(LUVDz$;a&zu{cB0jUIs@!36d`n{2k&W1wU+p)<0Ho ze*WVqgJZf|Dc#wETSZ#W@dihGE++ja8XWbMk$lqND8GW98#r0;mx!M!_&~akd!gX` zJk3=G$8_VA?hOXVbOWU44#Dpy{=b4-bRY2%!TC9%rv;x$@~;r*dRRl_(R+qG+PR7B z{M6uR=SQUHTfzDMYr!lKf`jYND5~gt5a)EC*J9Q%!P%aU+ za~;bKj{OEdKY5POQ$Tt)I`GF0J*dBTcb$Rf437R;O!;PyhzRqfLv ze}MAEw-YeG$e$oS0M7AX{xk6sMKgSYSA!9P|4h70@FAE89Mo-f>Yqt`s=Aude+==N zg5OG<_Z8UA7l_Xn@*fjlEcic&w+L?88pH)(NxVbwhl#He{3YUR1b>V8TEXY}G`K?W z4&s{xUxyioW3&F~^e30^7QwlEpBDU|RK8mUKc4*ay5Q{pZGyA^KNg(*|E1vU|LuZr zr*u_@;2M`N`?HAh&7A$&TX6R00KwUxWrF{P!rWhC5KY-Ye5#Otkis(s=l!%=!LK1d z^EwYNqyF28$A$cv#5)9MJ*xy~J!=H#`mk1Tt`AoT&h=rv;9R~p3(n=cNpLRT&4P3J zZV{Zz_i4eoe76eD<@>teT)tll{weiK+Xd(T$|8T`Wh@u&uZjfc{;Id&++Ph4oZC@} z;OvJHf^+{A&4TlN#w~)+pzzazpGM)Wf^&Xf7o79^ zrQn?3?SgZDEvk=PUYy?|!8yOZ1)oOw9UwU8w?yz-vSWncoZm9RIlmJH=ls?R&iS1$ zIOlh<;GEwU!8yNi!8yMjf^&XX3C{UlBRJ=Gt>B#BD+K5KZW5gHyIF9~?-s%5Qh7Zs zcpdR=g0p`<7M%U_rQm+jvt4lZkLuK*O`#a}1N@vu5skOZ*+0DnXa5Wkoc+Vko3I|X zf1;3Q`=<)d_H+Nrdf5J2AD7o6>1EI8ZWA~@T>N^rJ+jo?eDUs@|T+jE8BY|kda z&&LeHv03mdiEk17dg4zD&i>gZIJcLN1?PJBrQlo-w+qhY!s8N`3%9Q#Tjzs0`=LZ| zZWkj2XFrz-&g0QU!MUHGDmeRLrr_Mq*9y+%GGFk{@lNn>bvCUI!TVFWtP-5{uMzwr z>W9}0-ktc(f)69UN$}qi-z@m=iSvCJG_MEzr)>l4bweI`l=8Jr@C5OX1;3QI>O|n2 z^)oM`^$PR*NWQn=4-p?A_*=xw433Wya`{dayn*sNRq)G*&lLO<;)@NA`{!kpZj0c& z{}UIS*VjDX#QdTj-d9;AG40PW*4XaAQ7&i)@EIQzd$@VzPBiGs8L zYX#?aF<)@DXR+XHPmADePh4=er$cbIXRY9D&lQ5RJ?jN$du|q-?b#$a+p}44wr8v0 zY|rb0ucUI^CipqTKNkEv;=E7K<<5GFinIW8*3(;X)-ynG-cR9ueb&Q#qL62QP8FQ} zIa6@iK-O_?0ktk{k6O9#ha3+wu!zkNg>;Bel*{-|Gwp3|L10u={5E7_jpbGdupkl@W z30NVBFu(8jzW3(6nFO@E?S6Li`M|t)-~Ds$x#ymH&bjBF+nkqf!4u9)x8P~bOSj-z zoR@CF^LSpm1<#7S^mcPxR_CSv(M(U|rCWTvGcVnOzxyQVJ$dO?zk2i1Ejat~(nA(M zG40CM_+G*X{1xY=TlIVM(yjVS^3tvPEjztczh!UN^YVYwY_~2i-Ku{|UV4KGzhy_a z>R)5l)0~(8IWs++m;Sby-kO(g*+DG3dw%`P^732tugFWc>R+9gzRzs8%aLx1kP`p9 z^3tvKvfGhvE)g<+PhPqupZ7Y_O%jm#`|{F%Y2s6EG$9AUqwU`M^O!GI`aX+(9O;yc ztiR&C^cJ(fUProl)Ik<0$xHvLsgIR8(w+PDm3iqFy?IRlit+2jXR{;Si8srB%luCK zRGRQI-E2zMu-K9A?5|~KV}579Dos2w-3k8_4t>)J=XQtO=!A2>ga13>+~t_pPB`~D z#@7kwqYk_|;r#vSvU_seop8FQHQW`NIeS|D&2vN3?won&jK=$1m)$z^mZsaL-F(X} zb7tP-x-2xaIpn(Rmbr5;Yo2rSUDF!p+&yFF+_}@{G*6p*-<_A$H_VwEYMg^w2FNpa z&fI>PX54+}oimwx&dk|2n@yqK+h)$S8lD@PuqEd-k-u8|O|7-F(Yz zE0aW=vx)jSGjqPlegMRVTW>}+Mh9JuGv`d3J>%{`%S05i)+wue zk@aByei4OPS9M;x>n_#`KT+eybupgF3N2no{>i_?_|7c(_zRo-(OUOpX8f1m{y`KT zsQt(9HX80V3$lGyncw~!NE@jAr6ym^uA^o>`R(sS`atcsHX7|G%yMj>EIhycPmwlI z`*kKWx7KB|ntuI1f)4|=um8Ykf0#-xpC!i_Z~f`_5fmP%eOJh6zt=3t_BlrR?FY@Yd>*#sY@?u2 zi}B3=*_QKfjX8c_btdB3D*r)V1=g$eTY|iVDZl;j7mW(7e8yY<_9vL_Ti>l;tNbAI zT(Om&U!Qg|`Z4kMxJhutA5oHzKk~=?I@#94H}Zej1qU0y*8ll=m*Ycz8uRv=2HnRv zK#srsy#Il31C4*HIdP^eFbWg?bMP-8{)dp3UnfhnEaU$;2jCPU@t&Xehe#W!{qEC& zSp0RFbj0>Y;a`6Haip=%GW>J?z4BY*Z4x`^__Nx#et&>(1C=lRJ0pkYD9cByob~%4 z9;|0)*4xeU&NOFvD}9?$zR~Edl?s0@vwUmb2dn>9&KFRAApEVk$S7zIgIxbEKq0HV z#lI3p`&MKjYc>|B8wV`QeJMRh51H3O-IB_E1f5!XU-&k%C|W_L~Gl z{n>eM>SXBhPmj43b(L#__3m;_)^5^n)Fx|_ zZqVoNqr-|{Eb={x?;_|cG%E|Nwekm)jk=iUE7n^wYIHeDYa-u|yyoeVq(pRKL-oTUE_JnUK+6W&TqDJ23C$XbOB!l9RtVfT9yCI^e zZGX_wdS$TTXz`B63+%20Vugh|z$-x&YFoh5;rB^S(i-%g9^D+e^cfCX_}Jj43jL0G zzRKBpY__jBvi2&;kE+!r9ROWVpZ^T;iLyF-#X9(&W^FRXFaDs%(8t(1F9uc@Yki&g zK2B}(R~ET;wfcR-bZdhG-Jj>H3jzm~T4uzUNS_iKCzIHJzc};^SAd+)7v+2=kvc!C zEmI1CyhT20;N|Fwab#@(QZ{w=wfHRW(C>rk-h@8e8i8m(j9(rK)e+! zc#cCAX!y{z2z^kF>lj0^(&q)>`W-teb#a22OQ3^#!;vuXperBhv9(|A=^chHUtLt& zl2D^p0j3~I6{D0E(+gWRtI->grpK0iwFgCGDL}#@*Kwux|MrT~LoTSQk;>F1}|m5s0}_BI+w5_}SE;(#=HA zK#6@h<;|QdnOEHJYs^cD`d0MM7WFL~D6y-5qTknSOqRh#fiKCf^deJv2IT9*1MqpP zZ%Poeu}D4N4{#a|lz_}MbzQW?eQ6e@RlVxM>!4pCeM!j>q$}&I4yg;qB8hk{LzipR zRclK|;#0(!0WNh(A`l-@Vo_JTA}~>1x9HFqWFghe(#3M$Vn9%@Mb?%SBGsinw!yo> zueQBYqr9t&Nxtg(2?b9cx{L*4QDb;en?!nSY%;UNKs71jX>d1Pv}@|Bm-L1ul0aNg zfAoSSK6aPI6Zj3r-PJ*{Nl)%A)Ri3|8-oDjBd*tzdpx>w2&5Cx>(ddqe-`fauy`2-wpCZ907XXyn|NqFIp6t(RmRNAP|-*gxF ztTun+FHn^(np}G63Bn+nJoSDt^NRY8ni6oM+Vj1-sI5asUYLJ0jI7V_KTRF?LcORh zs*fB!LtQWm&D4madJGtv7$18`pWh*oig{TS1aw5|wQ=7!1M@c$t&tkv@JRBIERRNp zV+MqL#hUv3wE%9LWEy&Gs&9%eX8WqimoYMHeXXb@q(!#_xJAA&UYc(WAN8mY|35sI zCz!2-m{@^V9rZP@p%jw(H~d$RzsuC~qjZv-apx~QI`G!TTr=GBb)_@Yt;K39wb(z0 zk%kJ~fKTbH+NDM(AanciO?Ul*km+SQ*psAkXF?;b>ZJbBoc{Q zv9djk(kU*)oX+-q1}Y@@TjN7(@l#c)-S59h-(UZzL2EPRii8*qAwEdXfce8vi(3T&O-4z zrD}_=)^zF@ys8h~!pa_Fo~E}`u@gqm(nHkqt6hXQ&M&g<54}|foAz0>&{fr`M*o&T ze#d|?KK5&((}InKLJ*mfcFEtSH|D{5K|ZV&eg^{z5WA1HaD-F8J_fBK?*5UU>>g^1 zU9g`y<6|W~29*O?rwjBr zW{5p`D1DMGR7?6xy?_EN$W`UfD!A=9THK;8z~poREuXJVdrlgyR|5~FTkd)Ab5|gX zSy){6X(m%EeorDupJvh@Mo&`YuBMMP@oP!UkK5T&Ujo!7^|Z)2`+Q!4Rrd@O60hp( z&^!4TRNfCfW4%CnhcNF4S0kS+Pe4s5#1c7wBiZwJwW-?owC`)vzPG_1$)K`3C=O({ z7|9>0o3>g)9${zmTiyF%B-JdvXh-Fvkj8$VrdNrb+sH*BuKQ{jKZyl@J!k*LRC$7q~5`6><(0O9M!zfZ}AZxJ+j_IUBIKY z9uCIw6C2_4OFSk6MzqYNub_eE8CtB+rzu;niTVFjNj~Ed!`Rga z>N~1&7P-CerbK(+nbp-D)o{IZ7(u-H1$wdGL2Pgd*RL={@ik$-j@wo*>WVt5OZYKe zLE`n8ouB)4*>SV0Q0M{38SJST$>k?{tbrjFaY0*kl$|js_@< z%D-Br&z?_f_JE_yDRntMZZNZ0Ke4MTV~>()jDD00)kW7;ly5KXRL8A1Gv?6GEXx`s z1r1iAD;sLcGtzu>1X_nCwujeUc>GfuU6xDXSdCKtQ`=TugjB!iD&KzOu-@=74Kd-h zXZw%{`Ewz4e?2~_tQcfaHeFZ!haeQ*rf88*VE`J13iO6oSR^v9XoO3RE<#f_`RFls zLAcoiAuB`>Xq|ZUcIKd<M&qG&A)C>Ok^BiJT9h zluDDETC*ivtcjJ0fxa7cHLb+=SikSG0W~@n^%Jh(jP(*!bY~&EL$s8ss{()P$Aj)y zHv7egr5~zoKfe^cZ=LEJ><2A?4nBU?v~0bpC)2*k5{>d*sDoxkU*c^=A3duw1 z4mKP!Oj~_{h91L!)l+*%3Ib~d{~F~BfP`Fp_#{XVZfLSV1}gi3e`R5(KA z(ZmKl_8ZQdiSbdF1eIgDl15eM_5iaWzZE1N*w=!wNnPIXGjd9XE>YW_F{WWJ#`H*d z?U{1^O^o|5DZVy7?~>_3)!&!)TpJ&INg&cuJpY++*yVbIDhFCDA%gtqOj!_fL~p9s z!rxMwrpq<~z8;$bQkVtXt)@g1oHMZ5!Cs)Y{$~NT`x5ox_wb;$ZL!HUsJvv8Yf#y0 zGq5!`0R9xu(HZr@$S~D6r1=WeGiTN*>#+G=P5FLVP5RE0x0svzS~MydWofDtk6QTC z>2t2s)V3EsZv{8m6)eP~+O}PmZs>E3#c*V~O`u?GIR*!IL|8)iLdHD-Ve(q2!(*7l4>N_~Q8WKhpH>CDG_`crX zT5%@2uf=PWdT|=*#si)ay987li%@Nc`RJxWfbCwl`usIY%jO`43ghLceFxGuIp>t- zAnZAkC#VmThu45jWEY|wX$&%x4L76#Y3eCYK;4DydmK4R+MipRoaWS3(4?b_S95C7 z#H%30QD7!TY8z&sy2|exLKf_WZQ?Ng9Y8O40*|{Or*a11wGWTWsq>fRm1A(d!zkzJ1IhRgPja*u} z$`jV$5Ur>-wH2v0Y^Ru<#ys(hH=zY65CzHIHIbH_eLN_|fa|BIE*Gd%RB6ndY?W4R zy{JQNOA>2F7hfi^tIo-!7x=#pR#zB+Xa(9&VgM_KY4Hiv6^SV)rQGWCq+Wpf0}cXe z*{2UYF;SJ&%Q-Qxjl1s}r>?5Ft3GnV8>-;M@S0Q7MpdAoqDmJp>B;v2z!CI0bQM-Y z;02jOrS)0|5o=6RClhd&n;_S;hR$%69|p`Y0~w2@+P2V#c}kKkiY>G(ZJ^avS4&eL zDgGum{`(aD{Q#!**KLyT&60eNliH^O7prz4d(b!7-ht!r1r61>5@cHkv)D}_bV=s0 zi-8YlH%_kO>nu{WWxs;B14G`%Mr|F&8+&|xc$wu8S&?Y`IpoLr`+AU8BevFv4Vu`j zi7rbQaqb5~HlyLp4-1eNzf!d1!K3g)3S_}HxuI|z@?;mLmfH5{lVRjlUiFKFwY$`1 z?Jl{oyF?-n%s3jDu|dbC%~G_lHyoC`fU(D<(23LpQ13;stX;0n@-r` z!;TaEV)#X_tN3z9FW9AFJ%pueWY6?FF>XJEo&qcXL_kY1lRHu550QroA+z3yRDbOE z+ye|Wbh<#E zDH~~TqJg#>jn}js=6;X54jUV>xI}${Y39K%+tBeV(Q8W2Far(iS*oE1$lEZ6#w&h= zmFyr?gb~-*s_R0plmrVx2aB*yKHvePd2FNR-H5rjPuX9u70iC+%h>*rsDOGE-4973 zAUbGSYGqTH7h(PiMeoosB2axhG#GjH*bRMpe4GNis-iA<8Kvg8{{mmN@Shaay)h7X zPtXT*qb7iLwRD%RbOprK9!%T2ufRONx`bJ;JKq}+*VU=3+OG}vj}j%!DztFb}T zhYgzFqvA;7kdeY-!=biZ?Hf*6u@W0EK_AxSW*^qyId?-F#DHTVo`^1o@AxK zujBJ9<1<&zpxBKMu~9x-z`=$HHQb{5)e2yIj%Px#F%m)M)B;%-l|Z>cqL<7$*HP^h zqgt*;QXWo^!Is7-EIb{k!jTX91EJ&E!h9t#q55Tp&jh21YjDe>s1E$C=`3)y8V~-f z9j3*e@EPLDy4sQ46D-31Vr?;Ls>^JK3--+zFYGC-O5k}agjC2~7--s$%{>HWMhf|g znbM6E?jbD2udG-~HbLurU&Mj(!x$;*9HZ>HCO>6bXgk+p*I`>E zPLnzIse>XTE$*4eXk(|{y&KI+DhACo$F3{XVb_i9Kw@BiJ2!8!83{9bQhj(DOn#~7 z@BwSAwXntteGav;z^WV&dti&9B(WW^FCPS-oen>=zncw``U zE%vqHS<%g`k)v4g4&bTAOA&M@nSdu=apU|=?HN2&pyeA&ms?WO#bDLH_cTeYD9-7 zUeLrV;v-!gw`3+;n^ZR00|_Buh#sr76M{;wIkJr6fLZT1msdZu!s&h}PgBTf>U4NL z#2&1s+f7R*1P*vFo=D`g*s#myFLtCC+UZS8)m3v!)Kx#cLR~ek zs9xzU?Wm7ru#8LrT#-%F>&2WBJ$6<^!!k#&360>!$^n5I{W_lgf|}j8izbS~k!ssy zWullp(lf4g>d2xAcp5Q5+&Z#&f|xgQ6uLBGobZqIP7uM7z6p3LnINW)9E0>(OfSPj zBOfa8(9DNQQyk#)SZ-30Z`bp!nvw#gh>3X7)i%S)WL&F%WSuEmGuNbXXcuPbPfk-8 zwu6h=*f)k_c~|#u-M~F2roC-@?+4AdMZ`n6W|IRkbU0oj-m* zcW3?BA`Al>V|R8JHfN2!*+!*mhq~|`G>xr9vB=n)odl$@vKE#ocuek%u2)-VU=Px_ z<(pDioklcgSEhinNz3dgPo%y=jK^wV6mMbo?fqSIn=|&D+z$Q2Xt{e@b?lytO@D!p z7Mn$^j534RQuk zv^PU}=2V&-AsoxiP&CI5>aoWNXq>3PK4_Q0!_Y!TzhH|#bO-DEJu|A&An;`G@8*}w z&5ixjbCI2>NKc@=WsHhnNmTWz(Un-=;?rPt+3f{;I~`ik&`vfaw_ZbE##S|UE4h7K z^-^e)ArBEhatyOyn)aoC$u2%nfelXX_kJL|Lzz!Rk8{h;+@fBBN9<~ge`YsW0$bX~ z$e+nf*^#$)w2{b(Vl$+ma>Uj@gUVr>&j*!*&Xo?b#%2G-V%#A8HQ=-NH_157O<9jk zX=q|dN^XXJqArND00eJi7xxqe4guk%>+ku&XJ<`MLB9JwJ6~!msx%48*dP6sxjzc@ z8wn3EhltBf*FhgG&ThB<$uHzyKLl#fU+yAg=1(=UY}RVlZve8=4>>?q?vOS}D4YZR z)mb7yHg`XV+#LQ-zYk+&|93(uVBnrpt&45s?BMb@;`t!>ExCL)9b7(}4lbWf2ba&L zgUe^r!R4)Va`|tA%l`me{yuQ|ouwyWIhj6ZOk_Pc{I|j3hhoVFhu<9fq8@|3yghWL zx~dVPvd;TU@Hnv1tmJ$ZRW5d}qUI&in6duo162 zEzP>J)n>hrLTuY*c>;C~j;8%ro-p9BQvQ1Da~~T1-?%(oT-GxF7g+B@n3R9^dOul`nXwptzV$v2 z{@nFkjXugz&0F--ugV2}uzEiHqx!GUIcxq?;OHk`^RaVhulY^zkIGru$+Iot#j&#U ze2Ggc%L6a(^i;}U-iO=VpHHXGpsE20d(SGZ-fx72m`>F_|9(U%ljg>sRZ1*~rZJBN^+cMo;wq?4xY|C_W*_P?%vdwfZ z+jUsB8?kIRXP50__2DC67?JhG@Myu(?SgWKqdKq>bR#(!8(K><0Ij6Z%(S9wM4@tx zn5uZLZk?xKhwcWL<){)Z$YZ&($4{6#QK2sup}Iv+)_WgxvfB@AmFR{_f9%;Xa>XLj zo3hJa)ff79P5d@^l=M+6`d5B5w4zsHH|0;@)RmXGm zAz8p;q%wopTKZwt3Ft$=ll_5rXz1aSdxk=zc$RH8{Rn-#=o-r}v|h4Cw-0Kc=CCM%w`dxnMEdP{cpbx!;rhtd^)zZFejR@7DwPcNVo9a+S zX;vMQB}1c~tTEJ)ou9ffw7L2a`gy;l4?QJ2CHr}d{S*>~sT=VapQVUju`fi-cuO66 z8431?o7pcVh8(QYVG#_%=g+|^Q@N_pq_4QhEB}*~((7{rj#EfhVqZ90K7*I-xb z9+OoH=BG~c8Tl_WIOUz6nKOMO80Ear%$6#Ye3IyjNP>S)vPt{>Imsns{FW|Q41Fd- zlEsW_`p7T-mCxGq_y&Ql7xIP2X;c-mRO**`>@p9P4y7i?eUi>@s5kd-VEI04kkE0! zFo!+=3!hL~wK{@^8q2 z9mHmA0WU@-y6Lsz7e^%Pv8U5*w*rqf*bhzv#N0VX1ry|6=?c8qnRsvw?te0;U)e8~ z%X63XP+M>(8iISx8S26rY%&R39(xO?sDq*_+3havD(wPSm0LS@h0;ycI?@y`dbmsotE_ApALzwJ*1SMxtCi zv$dKzdk4zdGf*N7`i|z!;$6t8u7V&Nl_%&hpkld?TU$Zw?Ur!G$e!QIyrPSC;E$x^ zSO2vqh@9PQ2*1@Rp+tkQIrJ&@@l!`^47kYa=4s3tnb$Nj$s zO5kl&x}LCAVvnrd+~xKAiVOVoSj7XkA-$rS^&B6@43{J7p1W)9YsL@OCqPBI3o@Y$o#iX9>xiIby zYhu4v+MdAyOwkqT?gM;!WY4GgsjDe}7cEaoU+NftS(_I3`xO6`xB6yjVk4~TQ`Be& zn)P4#q;WVavKQcB*SOKGM(zL^pkH-YVvBWdQWj62<)EkbDtrk2S_?n_co?NZLu)FZ z`bRv4uEQoT#9Fu{00=K1h@>JuG~xl%5LgjzU-|1m2;Eu$u}Ia3Zh9{|1Z<827Pc~r z4zV%Jh9dJkBV3_ywyZZ>)`Q*MGW_%6pFB-wW819DD>kIYW7&oN$X=3_fqt(9gleQ4 zi=}8!-(sDo`^$DBBhjTse~4DHDElW9WlcXyzYP!9^eD%8X^{>$(eJN1u11@krLu^g z^j|=GA5VITBA2m7GEH0%ZcBe1K{D&6v!GHZGhWu5UzyVfF9CK|^Tej1A=v>Uk9C=WSJm1XaRE;h?lF9hRo^2mIV@hP( z;Fx(K<((;F8$@R~G-#zSYRW5G>=AlJQnacYTN=nZU#k%YhNaLKhM&N~6kaHK?LzIr zSY>TX2J8Af=m^wg1Bf(2X-WFJ(@heR&nGA_wnSY(xfdcVBzGz7!j-EPDQgZ<#N1pC zd1yAA(X-|`o(*$V|6WO5j%uZNV#-rE^uoZj;5)hNKV1b|+VKTlUmQlw1hN~yh&q8( zc~oWNp8Jj@;fC_a6UfklQ?`%c3y-}wBK|>?N)Dx$;!FY(Hwo30{G6hhFWEf^(wRt6 z7G2~kmK8vJG+YuOn#uFfS)pc$4=vFFK3G)bhiBz7)+$flhkWOw55{3m=7C4sB>JyW zx{;^jDd^v>z>AGiBvR?sE+37b8?@_#!209(7!?f~Mz-wh6b07KKsyt3{Vskp3^Y78u} z@F$hJ8sx=pw1mUiS4O2usYcHAKz=-W22>37;q)O)i$Wwo609$1dKw*1-L1IXP5)LM z-QTp7fKn|CV)GNI(Btm2D8|mJ6~{EOQ=9)j#K?!F4g&?HFOWQNAxxamK_DNMCjH9M zxcl4C1Ri0P8`n2}{1Rz_LjixuM|zNmk9SFTNWVB1d55c{c*`$70npOQgVw{yeY;|e z`R&L6BGj&*oE>l?w})9=+GOPJ0jza4zG}srSlPgcH#Wi!+|oIOBMRSe_^xm3u_n6I zBt#N(T&yqMqO6a*M`jXPsK+&ayt5y)p9v?1z0m=rc0JrP(QbbTr4^3wi483XRB!;N zyJ+dh?59?%TeJTx=uvQ9&6@qtD>Zc%a%!6vjJWS8+}t`A6!RB<*lufG@CCd;z7J$J z22HibASH4gHQFwXY(}^fzt}52$cAdlJ&1l9CPe5mLbC!D8#!SE0Xg7oij8JU4|3{| zEfI6vxD!1zP=Jdp_*ocsTeym}$dEDN=Ow^u%XH9AAohsmT#Zcdb~l6F(6b#|-3>2D zPxjcNGYyyZK#_Fiy96a8_t8y#6rRxFPnM!I-LM!+!9)oRaY3I~6OW7nDwHjVOY+Cs zTZ-V`a%sb6hU_ohqKTgnXQ>yVSD5+^$lri2x*mz-a$c=UVpeTgLG>f{6syDd^IM5M zAej*!L6+I}3qT^fZhGoNeJ!r9I-xGOp2bB19=)P7AhwrpuRn4aPQc<5_31A4X@ikg ztyd!fRlfW1(QJk0#NaT4p*bNW` zX{xVIefVV%1;~h*#gXKJ0#if3O|o$HY3Zsz3woEdkHfsM5gEyTW?dck9|zYD`EH|k zJRDPpq1$L{ieK!elIoG?i(Uco7BMT4!Z2EmICbdE1-jSqZwgE=$jMe`O^Cbuv`B(N z{mC=)DC=_HQb1#r14I+h40!~maN~eYbTKP)xjze-CE1#peXs$EU+f>KTCN|21KTS3 zT^NFb19x|T%&@00GlmAsnTbOSJIIb%#;pLGrZ}*bK{`I-TqKlK^i9ijWL{ERCWA)6 zBRQrTf_%(>zmHED#BJ8L2U|8T^3gZv^@)Ij*w^&j*@#(E^48 z${dwBtCBo83?N7oHX!i+s;N2v^H9^TQa^#Jpst(GBOX}nK(FEFq^O~`+{rhk6ZwzUU}x@;$MH_b-$skPn2Q&Vuy9``6F0c zeaXFpaDZ7WJ%n?u>eG&-(nHmW_fD%0zgPqY^e(DOzF!#G{Vl|I8G00JU}W#NhHgcj z-T0!TG0r`T4};M?Tg!vx5L-rx*j}u^@SVwSo?jlo~Th^R#fI*`)f& zL`Y2XU>P!lV4KcCfF)yt!w57c_c*X~5J|!(0;{>+V8jP>H3JO=u+^iS#iVe^?H+<( z%(UcQL>xS!$0|OQPVn9$q79MxVpqubS!`DvV0LyyE<|5e)V5B&VY!?_Y#5=UBrKe? zhGK)G9zh6&t>~+aLU70CNN8q}o5i~EI$3o>^LP|ObDm$@WRC&|q znfn_Jhhzz5lgzoYoIE!GpHiT&h*iYL9!Cm)*FjVGCJt|5qVoeC`=@Y#)wZTW{P(>x zHm(mG!SUHucMiGW#?!Aal^K_yKPcQLOO=_;9{xI~-#PKiDoO+jYzDO5FIA8f@P?L=lM%kmU_tvE#C zrZ|14J)cPDvJ^_o3S%ofrz4;|$;D$!MmRVW6t6&dkQKn15)iu#{DA7EjM=O!#-aK^ zCKbKw_r0r`Zxq(3s_uK1!xEqa-*Dlf$RE9ufsw_AWZEOzllu#=a)I>M;2(}reh_{~ z)iI}+;SI;0pS+S@FgX9TN%L-9=4l$v(Ws6*vnY)3p>pD^1R28jdC+6<3Owto-@vij zb|%?S8PYQAThFZ5R-Y#`vFad>e$7v^JLDqG$q$Fk-^=Tp%eRM*De98-)oR;|ppJk% z#54)JaZeut32)`_Rin@{kH0nKI}ICxKy!6uwFF0vzRHuqvw1`oRuzK{H5fJoBN%Da zw~Q?UP)V`L-H1Y(oERS?Ng$}~2LXd6ym(!_;#Q7p0-13zqydpgD zeDB1#`(q?wDx$==y84cBMRQ#Bk#Qx%Bja$YE01tN7Oe^7t{3A*(&SLB$Bcbsv{cEK z5Gk&~*yBeSBfO@94aV$pb#pv72OBWmsr_P_@jNHcky z*f|Vgkc=~*L5wLI22z%yND%Gul^9qmf00`bvl-Nfad*IE448U?N+&RaQ&$&TNf3zDhYeyG8h4>?rMi0m1 z@FJIoGGGrn#_wm*VS^Lo3|H7l8DWr(E7>#bVv>XUG}O;}ZOu7Aj9gYh+2BEA!CP@O zcU6xz|9IKeI0ViA{Ob6g8s!5mvff=2JxoMWe$WvI0Ml?W9z*5$HVFQRJTZtvw^;1d zs27t4N5%%#`<0$ZVhF~6P}&FNQ94EG+{_=j!42Xy?s{e1AV?vzWEOO286E=h!XcQ{ zgbw`wDiQi2by+Sz#O#~M!_%Px`!299VNhiEga5?WPD7^T&Rzjzw43!I`7 zBSb1{{5CWzSoPKDAby2FqHD2*t!RwCq3XhOq^%LF7#p@DnqF5~6I(@)kXbrYVnyl2 zW*ewRi+>*uqP@KcYWj2LFdRfNOgAB@>D6!%?KMM!(uGwd0%EOn>_bJQEmR{{z|c8P z{rRKC_UEQUn)o@hrgro}|Lvt3Q~Qp88uri!-N$a^k1T?52OL7L(uY_^GQb4_P%@Oz2J( zKXo13W&BjaeVySaD`8U?J^N*x0D4uG6*b4`Q-J-o|fQLc_*L+E9QpG`Z zu(gJ6D=AF_rIEO(4QEXhFn+91xcMN3J(C+diAxHUV8W8LEUunf4y#XY?F$B~y;f|Z z<{cUpysWRwR8`Y&>AAJgcf2=>O;WAdS1hDeU5s9 zqMd-5f;6B(1i@4nq-6RK{{nTuR{hz~sf6KRo)qUThUmt%&^i9t0KxSRtbx>j(!jJ5bOWV!ne-ONbGH9zBJVH9{z&GR9_h`hQW3O z)R!JTx!;$3Z%};RuU%T{afFUabe~pOL?_GS9?LGdP4q^(zcsWIvUM+DM&wdN+{a5F zUV>2S$)N%bf1oiETepl|L}Mz=lg;RgVaVeI3N*A^mdWXOwee&5|8}85JJoc+b>(E0 ziS!3ujlA;D%(gfun^ohooK!Pw<3Nc^2TEKqP@)vN@|#ZpmVPj`4ph8(pu{>PVq9Io z8)rF*&L1B`>t6!)Baq=Nqy*xR6boTl?E2Wh$2!*4F?STj>VbUx~u_S#CXJRqF(9rj4)f19L)knSu zJ5Tu7rL^Yo$VJyxzM7nY-7|p%EhoG-f^H3V4l(A{YR)j zn?uWKELw()T>YC_Us+(rPnLy|FykX$Arc?MFv!pV;S_=jbwsrW9ypqMtOD^qV2JxC zbg<fQYiR#Bh7(=I_(Asi9IRONLJ|@A{w|$Er9wI?Y;!In|$pY0pr5!Fiz^bM|th zj|fBTaH`yF(vPvt5)yq0u!Rfm(0(}N`-0l`GAUs(vVjPYf=C}5br^>#i3i-DVwel> zrMd7SX)gR2GQ_kY7kspFy>{d*QMLnnkU6qD$8BKL|mp52&D`KGHzh=Tpyibfpy>c)h zUU{*4c1lxWH@*N)m=g@yUT-i|X~XUdYdi5rv!0;RAhnn~zzU#UhlFiS}j z4?i{R;;6===Sf3e(lq34iEJ4Z`2?Fx>phTPkXj7$o*z+*7uFyl*)s}J7xA{>8+gND zQBkI@rLJ0Zo;2jWlstg=keynxr*Qt!tS!%vAk)?1_f>V(lJjW91L1wjf{(5Du5X31 zd^qXBlpU)^cM=mobtk_*uQN2-MGTGh9fJ$ZqQKaS3TTl@AkUib;U#^i$q4xMapzZw zcacQl>@pq%pQsgYFwhQ`|8&rd*o}d@(GcC$FtW^g*=1*-T)) zR=mRyZ?J3>`s%fH=V2v**Zs0UQ1C=5Wn5{P5ll~JLEUNaD!mL zsgNANa{&Aj!-zZ@p1>o)sIbSpRu;A=ZmoD*7k}XNh_|{5}{CVRc7`Q!Ih{C&nut z*eikgkh7!FmQ+of*=l5pDG2lPK)1A-@#$UKSs&Q<)CpFFofRxaO!&~Wo{{q~e9!}j z=!rPXu$}S!PjbRi3oCPsD@U+id*&Ptur*u(@fxYdA9MQ*nsAuW)bTx%TMtH6Pnt>xnN9# zy&UbuL_G=@uklE?OE5OtD9A5B>RCmsMtllNz?grjCi<@0G6|GZo~RXnf=Fa=BJ?zM z3{~6qIup7tP?xW9O91PYJg}k-7!l&`Y|;*g$uPlrz*!6vTrca)n&9;Kx6cWRt+fbb z`-Eg71y4vpE&0xf*dWs+H*}X6MD)Y-b9yp0Z2oReDX=3{uBqdH&uK3TF1FJjT;Ob)%qdnA@z&#>!wAM zV_b{aqudEIPKCkKBA_H{Tiy++;PFWfR0Ae}|4T@C_|FI@8h1DP<6{T$oCb!d$h>~d z*m+W;UxCg9gHR9#HR=R zD%)@;ITZp~LDeDlm!b-Xxs4YH{W=WnqpV?Wqig%)$Q=KkB6?_R`)7VOY;E=hLOrIb z?KuE}v$+6uO2CR#^%`h_5eVb%aPDm|0rNJP6{rxW?S|0C4{Uk?k`;h(mJC3cdJ1?M z_%5L1;NT~{3+M*}KywqIaoz+ZH>k7c-Lht?zrcM!w-B^b*|P?^56B#zBbW-Lo9aOB zr9hv3AJBv7Gy7-6v$BR!+N!p3Ql9kgAH=hQ>oIOD;;lh;Jgffq38jCTb1RSu@jv84 zY+XFF-~8ZB)k~LgH`d~p$b>jIS-5yjk7O)1Z-(PBn9k_|@wzl%1ueE&D~{%}O*s!G ztBZbt2B!bOf2_JLTlEa1YKJU<2?YR*CgfFV*e!bccLKM*d0$E+MyX5t!UwbFHzx38qWG0HM{`yWh(&oYQ^r<_f1RMJE+GFG3L1U z$pJ%9yl4z!7A*nX>LJ%I@cK+@i&@vQ&rw&c7yufRfYX-~$6#kNTv%Go*?-}FK}!@Z zRQ2$FCK(OSuLOO%6a-li3o9rtb^D)4nRY#?xsp`n3^(GConxBfFy&=})%=Qn`em&+ z0S4<${XN>1F>R?7M5QK#+i|gSkjy9%LcYUFV(P%iK|uXr`i72Y=&w>7KzjOH;-HjY zKD!{@XHlDE+Y}~H8X!S<^J>awTlrNV&A@b+68MiRVnA8I=(Z}Xe>$GC=Du{PZC%6# zIEF2*c#WDj*+43)vL8#gz zhcGJ5DBMz|Zk?-*kX4Sh+dcWcFlM{F9L7cuEboo9Jvwldvb$^G2!VLzH4kVy|IcAx zjO^2E#0!R9(GFzltk@Zm7S!UwVP*=~#WlG5@Db{WI?i|S9>l-HGsrlM)?mGOJS+*eKB(cGBvCy1I}hO|+N5MMtsPqZ=jr$lC9+wa6r3azB^{_N@76srB)lGxVrt9Kk z!}bkBh*eHA3jG#fpn-D%B+>L2>lX(yhz|lqi>(E(oC;Yk{s8LIBF8Sh_Z{jUu8n*C zV)(n!x-R!*y_P>fEJ7=WJm&+)hHK&@zKdv!!+2FK94K*f0i2B7B@<)w`n-}E z?!fB6Riaw@Leo}W7Ra>gk@m{ks`uvoCN-PXCN0(^B>6`ko*n&lUoIrwaZ?CKVn&<} zQj2WV9n;M!<@jYUu*SR4MXqTsh&?U{j5KG#-N5C-M0P=2bioYaLhW!iaM4eL&Q-bo zvBk)3#lKyPkMa+9h{qOk78u*accCVRUCKgCQ<}A1j4(o6t<8`prG46Se7!1zitasK z6YX?(`3fo+A0K-;Lkl7B4l@|SEH=^i`eQS&n0~jS<^n{<_*EF+#>Wds`>S@V3!edS zHSqq%VR>jkYIFg*3E>=;4_uwMBN(56LkP)0WcR1sk`F?{iM)?}>b1yKzTJj)WAeef z-G#aDg@v|17osEl%`Jx>D4DmdegBDF8}~f$^>;SD^FY<>3Ljr@|8zoU`?dr7Z#i_l z^dDxw>5}ie54m+SC< z=;cQIKlSAz{6G8UGH5zQdetZDA}VWvs-tSlAq;Nne00cRUtm177;z|ryMExU+Sats zK!0iHK-hm8SR5B0Q_4WF5HY@tMSiFZ25SsN)Jv#DDMGB#aF{S#xH)y%>LN@W&Vr4Tah!0N7aRXdlc2^YZR3Qj#Qj<`2G`J z{v5;ie`EaKLU&VCixEkRl0kZO{o--)5vB6N(g7p%KFe%4>WTkN#VGb;3WwsQ(a%yl ztlD|cm|Xpd^dKv@^8bqY#7m_Is&*nC){i-aI7lSt<@`@Lg6hI%5ExF2(oAtD9#b(e zk6Q6Q=OUtE1>?WtJRBEy<4&Y*bzwc&N_HN8sz%3vVlap`;*YiQ@dM7m2)c|x%rZPV z2i>{vg>J*2A?`j?PQR{GPQUG#eq-Ls&OW}5+Iz~$$1D{)WC_kazK+=YnNyEuG&%Lw zqmwBHfcD4c5-BEG8%V+3>~CXMnn+Qjya*dy=@b|l^0_d=c*vg*ABWJL|0#BKyM>eS z#7QImt10Jwev#b;^5(jK2Ti5kz<;^Pqk)tZEypssC(_NUvT=VUlNs_XH+d}Uz8(MJ z^25>-T71NnU{;^%k&dGB%{lUaoVO$R+c7=dFX@@2UbVGpA9S!!Ym^OIWP@AFY~g}I zmpELp3V{qge zC4n)A${bV^!fav|#GDZY8m5_HJ5xPmf zbIV01cKa}f*tqM!=}-j8OLiCNh;)=KsEZF#R%U0h^cgwwLQKYZl=0|H!u&(`@pE{!N~QUQWY# zBs5toJ~evzWA^eS%?5>ItR=m$r#GVn(RZ@H0rXAWp7A1LO`y7LI6GUurb*d>Qisw> zo%0q@zutn=CEvkA4SZ7{sl$UGXGbhm(@;VY=K|X_#zt<9av(6Hy>`Zd+8J-@GoU}h zx}!I2HPy^k0G?GdUvjFM+<)b^v(huLn%S!l?qOk&bCGUnnL%oq6+a5Bv#=2?z!WsK z%%G)ZUgWe7{h9hEtyD!+I{WLJo+4<(1L&I*V{R|>&0a&_+-d8Z1c>^ko@oz6HdY3! z_Wu?1&7ASi-j|bA207fYOUfv(OR(ky#HabD9mFhjP(%!w>CFQkVy6aUW0dq5dA=J? z<(KR6QQP#$hHCj7!L~I{%5#uJ0d{)~0W>JysRb&l)m7u+?oYvD7)i^byy<$&_~OtE za2>LgY_eA-!@51bQjfPLyhUKaixU{^NVA{kShgJ2+)8MSBfl75jNG_FN8Xr&X6{5Y z&hghH_gA|@9$e{DO`@rf+&@AI4XN)KkGS`G?0#vOD2hDfhg8p7CA8R(NZ&*1!oh?# zb~oSzEAB(VU_)QE7gBdDc$J&#)w@U=7n^jI2e+r;x~T=cm^gMFj#%@`?<$lI#7A9D zB#~X~;w=UPZIt$nR6DZbtiv^DsVy(yG20shDK`v^6l|!U5-Il0SzbL4DNPTY3JE|3 zjMKTOX!)2R%JDY)G`B(aBOdY<@j?}xWJh;WXBa)vaolMTA3LhC%*w{pmcK_rDsE@k zO+QL!2FmiOAK*V2RGjx2*|tA=Gjw-f9rS)`4lwn!EnNN zm>aE=$2d$3e<{vDlHr>XPr{{O~&5423=IPFejPzv#?5=V{5krgxry=s_$bmVe%p$V!*I zGV}(5i{YoY9En+9rg-5icts||;vHz%ZX6*#?O@UOnCxF z=PgpONCU>r*`}u)Evo9mFVP-{O@A*qii&63X^vJzui-eSM*jpOAfO@uxEtt^_wdRC zZ17Xtg`|KumcB&JKZ4wi6dZe)jZ?W}F(%a~k~oyhQolthY*2FVLv0gJhVceVCl-F( z_<_n<6P#@@*yui=vC%I*H;D@5Y}R8HxC{mEaAN^zY&i3EGasDne#{IwEs8AxdY{)Z z7Dyv^Zm`VJ+l^Guqo(Y%c#R(0&Cr&J%N&P$c=`cgo>L{Y8V-LyHBRVa`=4;YaEq@b zf9p2VrFJrVK+`Dk^0=9N$3Zadm8QoAt|H}?nEHt7&-wo42bKzjFe z09(e=-Zr@qhj7o>xToRBAJtV447p(EMjXX`MV`I=A+XbPA_Lj6=Loy5%+Fv+4EL%2rITw?5<9 zaoDv{)y;xM<1 zKt%r;Tsby`K5p^|tLgbB$6jsu5$sO3``hk&e`UJ9?Y`$<;Pyrp)^K~fb~q$XExF$# z;Q8isc~i%IqJ`gs$J>p=fT@+pkCUrO&6|X;8(mX9fPoaIM#-<_M07g5O*5w+cjR>T z04NP3qr4F`-RSr#`G)m%wyXZ)|M z^g~(KB00*ZuC7KL`VM_PToQ+4C5uYFq5Qtlt-Jp+po(u%W*R7C}HT?etplvcEOxL-ZHSK{ABt62vDA_dHPm;RXZ=;ihAJ z5tnkqlNie5^5MV50&Fn2SXfRwoYY*#()gA048L+>fzlVtTBC!E8HFSB@_lw!QBYmC zb~u9t}cr(1kf4f|<&yvg~3&T`OV5vIPN_dh~~5?`oQ$mJ4BMh{^95YO^;d}XIVAHhCS*Bg0rr197Dr3 zu1`MkbSlN6T-P{k@RQdRESFKvlkYj4;(ElO*zi-i!{O_I-f){k7mGf54mD#r!woWa z{GASQgDrnJS{9V`bUh$7(tG|4y1Zy&0)5~nl#GwNZ}7)Q70@P%F@o+SNA{a=>w;&Y zB~Btv6LG?E#i3FTDV}K(^?5C)nFlfOIC>&)#N|BWWRMdcN2<8geW&|!oL#L&i5K2i}v1bA%qqY)yB?w2-aC9tIs?C#C64f^@CJddhY{A5`IdW# zAJ4XX$XA>i5^-vu*V<`xA?uKVvxw3~WHs<*+v_&un*b1-(cu8WDgN2Vw@7H_@vZbf zIU$n8-^SonlOBuYNEsmn=$O!pcOGGE20=K${M`N;Wo$FgU*q$g6$8BZbJ$Df?;}aW zj0mHMr3hw0!bQXO3c-V2Fq1&!d)rQ=?P4(aFpixX7e1Vat}%okxW6>QPLK2tQ2aCK!(5_TV?|Zg;YS5 zrXQBSUVXSjX}Xbf+Y|ZZbamnBaBFx*c(A=X3En-&AUriuFhBKQx2ci;z?&aPuI8E6Vrl?@h7x8s zeq~fyINWc>!R(8a&4_WMm2M8gd8H8(8G5gAU;qJeaK-?t&MY0Li@oe9j(eZb!h4;= z1UE#^O-Mds1M=g7f@dH-0?B?~r8=$?l}@q8fKH26?)7ks<5+?`wj$Rg27B<*XYm{8 zn?1gPSmE$U6$EoHl1W?5VO9?@R&SjIJ9+daW+!Wvf8=M={Q`HYQv<`^*ay!5C7|gZ zZdSnV7Mdu(@&gL;gI(Cla%naTyE0G~wdEkb*d?t3lBGKu%hqIlu!|UtVQcR{P!p$! z8w8mcTdGFBi?ItIyO~9%b9|+{4=xgT5a~70FufohTKGr7l=hBempV`|igBM2ByQDF z`&xD29GIP2zL~c?<4${`u6XkG+GH+@)tQP746du)Fd0!_I{`_*pQT8|W$Ytilxno0 zN3ABd)Rr^hwgcvc5ij8YEe@jugmt8ncTbnv90J%n#G8!A(YPmK#^vKIQTEdamlfGq zCo!Lz4-6S6o=QOGoCmtvayJrdvFP;ZUxLg9m49xbG{UXN5e87&-RKS|O^qzWgGE}L zIMXM_N8O1o;80vz5?R)M4kE*S>-#)LQ)MP~amUjzcpj5#0w{CP`9h=A^+hESiQ9 zSK#Uti8}0}zHi*0QY~JsVSG@-ffZX5ji?kCr@#bsTp-jY1F7#qZYROGhtRx~U@Fdald0g9=*1N? zTxincaR4o9ur0)kj!I^Q&tMt&DjN-obU*shuS85ZrGA7N|WbZ zh_?Vd;Gw-45t1Dq|CH;o=oW}1VxX;*Y|0FgOuUL62zAVeAPg97@F_y%!6r7sChL?N z&=IMRKqPn^C9ol*wxyWA9_MJ)RlB&{JInX(NhSBcFKGhk48vw8eJ>9Q&XEGqy6k zy8x!1Z;&ftWqZ1Z_e(7%#3t2}2-y?vPb5Ij@L(Xq9p`l*f|$lOmSI_c+|50R*}iX( zQoMR>6l}WSxgXLN6=nv2Ux}#ckzy7eGE05Cm^42#H#5LfIMz(vUVc` zZaJw@%4#f<;9?;oAXhR1GBSe!*5Hz<$pll&>_F5IqanKpd?w&JXIKug;20MtRP(kY zvsh64(O}0$OT@5=wItv~WM`o2u!SO#!pPt*hm_G|=8pkbPGr~6qJKzBe~0CnMqSP`xL4b}2vgnWDa>D; z`Wzh%IjjgIa6U$5{NS-=ZQrMmE^TzsLkTMmChq zN05Ypu@Nby0B9@dd^Dj(@4|OpTR|Cl60nHX)`*AArK*|#oJHZgV8~oDCbpwi4v$EK z0U;{(Z&P1nr3qst+Yg+W&*X{I%MZ(ek_rqpi>&zvi`#h|uM5m`Imx=mxld*+|F~SQ`mVA!&9GoH&Z6_=s@+@CsAsi{ldKw%^6L8IqIF0!}O z5zzZCxnl;s%slUs`WDvG90wvQ>M$~39gXzes{Uv_j$(j+;WTgJiPXafoDBt)Besz# zs2sM%QFAcYyaVao&p-vh)n(yh)71q(&jIzbYe=C6BCgV?BQ@=FmS6J`I-1+G3)h<1 zSUP#rYmS;YvfAu8c*=rVD{Bz5KC5O(c%knOV4o5nog^4hfL49^hqFi*Lv(5f89A;d z1tX+^N=AO542YTuX{D-0QXtkQSsd&rji_n^d;_GB3YqHg9vtHE zg#;06zQ)eCOj?E)4!qP_pGRF)9ctu5;KQCqScpiS#iDOp&-3}$WNJrn zJh7eDAFjgiqmcJuQn>{aAZl^-h}f8OA7-&~P&vv|PhNJ~55wA%$QOj57{;$3A7DGe zo+3EWJYVBrwS}JpcO+;Z8zSvvYRf+$=`eI9rRg?q0*CcF|dwjSwrd9LVZ#WW%jS?Ap{IrL}D@B9DPOZ@t-!mI6bD8u=U0fEHUot(+_Y7PzUt z=4;}kaJ0^8abt`?4=f_Q`VLC_5lC*V+AxGP($)sSukLznQb6pZc*_CFRHTFAJ*w|m zn(C~}masPU@MHFeS#3hb0)RGh4R8p`0=pDeL@5|l161q&F-a?Gv|H+77(<=@6gd_+ zg9ZwCG+~i1jHV1r-1F?Pbzu+j0Y`)z&Y({E?}iy}0$$ANgPmC z$S78UhK&Q-;%)(GhAnOip8V>%r8LHAv7hA|;?PNRMnEEc-m=Dd4Qt#cKqHdUU~k?N zyvckapUK+d5_qv}amAm*7H84N)1BfiX^n%$UkVjdEMuHD$+X5zaa!XrZ81jD99M(^ zPyLQFHhUZ142a*gv7eZhI3m}hMpLl&*TjBCv_r=ji#VB>dh}{2gH*;&sFCw&4JLi6 zk#FPi|Fd^CaC%k6!GE44#2B!9lNw+@LjpGsYhvuVv1n?)2*>+@bEM8Pq8n zQp86)wX5HA1Dj%SZRlmSL^BXhnPThzy>d)o;kXS+o*|o*;g^`W#iW zd(Tc)OlmUHjjXN8cqiXJox0&jDC(=*GK-1>GFgp*>wUHb z5Lur|MCdDRj~<}b&$dTpSAm#d-B9iWY^6K#@=ddfuCRrj#)9qV>W=Rwi%;TC+s~0* zTtkEq5Sq39gd8h7s;9`VlOCaz)trVZDLtwoS8cw_eN|0 zh5V^o4`9R)9$tP|+>e?1_+9#;=u_IRezP#y#s2DdY=8A3mmpsHz~{(tB%ZUi*>s0j&9}P zzHG5xD4m;sn_6P2ZLj`7a(A^{XWQEQ1dI%(L^8eA+5c^T3j?O;B+z}jR z`(NrxASOz}EI5k|%eHGC3p=dY=PX^uVYACmCW+}~6|Y{T`>x-WvWn>l`>tCAt6ni> zcyoxj^487I=XM*=`B&mE8cIfu>ub+axy6Qr0ATsh z{#S;4=$aP_k$A;+*|eU}c8$K@Oj0RH2o4oUn>XdO;a|xyyf)osyi^`b+E3ovdDM)z zA1Nw#6lb~YZs{?b^K9z$>kd0W8#-O?$IZ}Kz?Ti>_x!M#9|Ccnu!*T&b2T82r?)B?PFK>S#W3nWg>RC`3)l)@0Mz^P z_R&2#%Tt{8HT~-dUj%%Or1vuKOT3bsbel>a1XQnl$!GJDQRFIFI=+oo($VEAo zALT9xF9TF3n0WZ}%?DAewdEHmrRX-9Jm6v|WR-{r5e?vYFC{4OF zEC`l`(b4u1J#VOwg4m4(p;gJ@Zo4g<{K^eCjR*}QS!0j zUr4}~r^uvdK8_}jEX%WL z!nI7R+Mi;d8I;W~t&pUZeK7IOaL@V_{fMD{H!!Ew2f0+;(}ur?F1nX4chj;@9?ItO zV=`?olzmm7-#)dpzK{O)MvBB zw&BZnk@WF<#D&C47wJ7|eQH8_Mb*q*McLS=0vBl@w&%H~4gZGSY!i{HTQus_FxFs=6u~Hkp4To6LW|eNfa0%OiPHa#)Y)4)APABQ(hB z;^~jM8gc+z)r}%)yQW>3$Z|G(gjD@tiVVfk-yzkPq%+RjuGtzki0wP1GK1;n@K%vG zWAVMo&EebP=J1DipT({za`slPo(@_pOPe@NAst=q(6^ht7uAS|%ugTV59i;O;Yhl^L+ zu9+y0*3ntANON7a`XzKznDAGfU_pO-n}n`_a96er7NEMg6`RduqH*_cKcjI;B@J~%_4d9k8TPdEWMX4;+!SIv>Ufk zhVP##??fN|tSBN0fY?P&0Y4xN3%l6)-0U}%^AT+3|I~3ZMTa~>-{UUN;@>J?e2mT` z{IgxlND1VG;XCM!2xRKE7& zm(;4f#k4!6P+xWxWEtw7>k(62f8-i5gKj9uk)R&kw%Y!0ZVT8c85au}V~Q-X*nNIM z*!aF!pL30S^t)~*9G)#4)SRa9_7g_c*Y?XZlK1ENl0M%VyY^E@iqb*847vS-o!YLw z@+UXIW~H~TvP2S8oDGR>N8XyKSYA~@Lg+f zw~g};NLe@3^aO=Wze>rrM{wn z!ZG*A3xkDmk05kv>z@AlyDysA+&X=~TUC@?>6R<6xnaUvMmui^@$yZ+$>P^Ll`-|LTDFTe8I0eLP|`+fNCJ02b<@Rk6t{qatDfrwPn7*lB9btjF> zOR{1fr;?_ts?m4A?if{bdNZ`@=+UGZQo~N6eunH&%JbwY)~mxwGkNokKtEJUQF4l0 zykWvi1fv@vGERe+$um*X-xr2^5b|*L)pAM6KOUZ0o+;m_fBYLdy!8p@8N+voX|~Gs zw)e}P`HuzQhQ-H2pUTZ^A<#~cH~LRsEVtRSTPN9j&BZmfHx_^Kwi9Fyd8lpOX1U!m z{J=4rhqt$_y))c;;Sr;-|7Kvk$QxjQC|IOdsz4Awf`-5AMO@C zvgdT4SA3pCy;okix&2tV#j^Il<@Ujd(q*>~ekzYQYfEGmsYk|Sf|q-RGl%c^l)X1j z-dPo&xZSMB2&e1)k&fYCW>2}ug9Oq7$+N@#PT6M9dsTwS)Zx#|CgIxOOt^i5w5IKq zpA$-1c#OUcEzd1WyVaxC>cewi79c(~D|Zy6xK4Hfr>)B#{}{eCJjB@bxI9>)vt5TQ zO+!|p@vU2C(2x@6FR_z5STEMBQSVT-ubLL>X%$(;$qM8?F0XoiyrQZWuC!fql5BYv z_k*C+Xx*t2<3P|Dpc!hHykbW(ciB*poyNFrls*1?WD`%Hr(CX&(!NFZ z@nxrLjVK}e`>Qm&mqfg6?MDPJ(51r<{Obe%*ZfJJ345-b?)%<^;X9A{QuEH{gZku^ zZXd;G9b{E-i?EW2HuJ#tX_C}xY+$qXMCpoMb8w#G(1*rU_=GK0Xv?N-4^`AfZt>So<9@8mKzmB|Kejj|MTr6JKlX;JSsqN~gj$%2w z1LtI$rn2G{^Nh6<<>9Z`i=$$Nm^%7>361|SqrCaE;+!~`*KU=>~ zy(j9ARreREz+8W;zWd7Sy~V%yaxO0X*iP5IijV76Z-|Ad*-<~Mo1=D{|Zt2J!tvo<7DRiEd58`afA9la_j!7ZIQ&*bSHtm77YrZ6;Hm|m={j?NxaCe5g zF!u@3=y~5Bde^C6*NLad+^kP0cgpXB(|Hhc)T8XO2wj&waCy2U=g(=#*T1JpTAB!Eo*MEl0%DTFlB)ZG%KZZA#w)?gDFOiq_%9`R;LM;3I@|oV5!*}bX zyF;#p!+_aIZmlhw{&(=0dU4bLPJ8}o?Jp&@kQ_3<@2=^6yWRuPb+V-5?>Tafvc2jP zqLRqiC>jvxMJmf!3Cy}XNGzd$FKRdHQ?=-!%q234W5T==6#4I&}JYcpW-@5?tuw4T5ruB{_MIv^^Z5E_9c;p873Y=9&q1sBs?u z+~Z$qyCzG$vL{K3Pl>m!og@>%@O^R@=jyOr($TCN`8+DF9Vw5BYd=aaJ}^4IXU~V* zAq>&`TcHcLYZvN3J$lp%W~S3nirR-!(fIWE-)vtclZ@ueVf_@Jwc1gNCF1_8UaUm& zRJ*L7;s(F1pZ;0chrgM_Uy__~#_%^~$<=nvGqN53?3r-Yv%~h03r~gr%qEs>s9*B~ zDaMtOtc`9Fw)zP>jWOXNpyn56EdGM+{~tK&;qVPoHG4SxuLY7gA{$8Y`S5PSlH4ej z{?bR1!`AW_pWqqs?fS%eej7kO#IwEas#gYFekVX~r2mPa#F?~#Q}TVc)8&0A2TwYE z_@{b5KtGO}-4B@3_MB-NYE~WjC!vm5Q~FYttlB-Akm)+Fux``!Yw#|KIWEQv@9bv4 zN5jW-i}|yL(%I@^uhnxW7jFN&Y@_8%*9Y5AAO6jZ;hz-NYen9=R1C}WUxdnS*IXvG zzx;cqe>Y!-(Mx04?$Y~W-^H{~g@pJZn?^#)wFE2wLK4K%vKm^w?>`~6eTvPZ^V zTkw#ew77^qFLFTmxQgx?b=ZDKen$De%t7N=wHral6bPl`qycHd)o&2>Io_dm7(}Uw9eFjq^5mSrX|h+O<8E55g90Hn$o)+_tNrn>eny`j%Wj+GJr{>DL z#ziI_Vh24Y6qr0JOvHTG3q!g4F^bLh`z3g(5ydgCylb}9D%_n?jpQ%CpCC8AxJQt0 z>C9+;Zsv6tbU*s)=XA7P^KU{w{krjOpM1^i>BnrAcTB#0`r1uv&JS35%UigK2cyi-zfO)>BC?&-r5j`T0un7Z}~ebc1w0bM7Xee$A7y$dtrx~1~&M|sht z4om-{Nu5`UFPhYQCsVIGLzXi7rpZ@}8Z&MLT^d_3zIh2U< z_`oE4_2jTznsI~NN$6;o-|S}mRC!D;yj}B-M^Bj`bK!kLGy0vHFUZ>3uK1VfrRmo# zpY(Y9gJ1l;M6*mI^qbx` z?GCa1I7wg6AC{iDL0n;y zySx+YXra9O)G30~`Ds$YC*&=h(+_I9`lYgNdGM;@{kDhmTV*qg--3}Zj^qbqPM43F zM*p*SPD+S7wxMj>Co~O%g$T0a^=vfONUlowq)qM3PdmtXOp3s*avB`vy8@Oq+bvah)q03s)~$a#`Wxsi($Ed5x)O4O=IS1nk4 z(V~SND^@KUTK@V~OU_+={?LMpE?Rb8>FSb2ONK69ykgZ07caYbK}W^qzJb$*UO9Ez z(2O%@O)b+RX!(jo%NH$OXas$WmtN4ZXz3ePFIv5*@TVI>e|Icf+HvvuLXnB^#=;ku4lP`~a`}Q)!hPBDRRz~uzHG%RsU6%h ztNi*^Ll-O(`b8_x%UmjS>gu3IPG%iGv}*AZ>Hnd{OV3|6bpEmx;{T08pHy?is-wqE zfyIoa7caPI@xqQCRaAbD)wa?Ti{MbXrgu@!42*e;rSX_{d9(8@*U z4J|x3I^yIacNu9zD;BBcqyYuC{r#`(80@iOFzU+S(v_>1tF>j+>Udne;G&MDtCuWV zvFxH{7hD!wREi=?Lx(M2wLeA>!Yu?>?Owd2Qe%ZGwL*+4(`Y@`Pw3kd;!!OB$&q`F+qib3nVB+zLWEg4exh$8U1ypL@BFD+d;Z{^~6t*C(S zt@@468dK=0i_b@~tV3l49{cjpsQ$~A%*d=#xFVe*_;Z(Cl$oofu||qzD^@qWk!@gV zNH~A>((?$*c_bJ;^X+mlytG3ksCP&#mLD9x7;SXE5cwK;j(xeelts2U;#Xf}b8Xg= zf|?<61ztKkN;F=+Y}rK;(^knyTG_a0@lp+_PhGHbNpEw>h{9;=sYyjt{z#S4>_G}2{ZuF&1E47tLtFN?D+TDo+BR*{`)SBC4dJiZ7zBKUp~f{XnF9RnoDA^43S_{NJ%>Nx2KcaS zvg)651HNWbhHEzFA0{Vo_3wK7RWjh88LrtF0z6#Kk?5b20iR(wAp_KR2|)&YSXkG{ z_GM!Ta7jeX2mG|GQ1nlz03SD$$^`yXxxH;;c$WAOn7BP6jxm zKnC2OlL4MvAOpTACj-2qK$dBl|GO*CxJZ}j@;9#0Ir4V~f69KPJ^!xHQOMu(tS`qm zE_t9yZ(_QD#Ac6~%>oh&<(hSlWDN6vccmGkRkP#Fy?$iB%|;I(-lp;z6rLhS1@uqo z0FN+KprdeZP6s$rq@!?aP6zm4k&ePRc^bjw0v>3nAeX|6b2`AjA{_<&EVl6jEcQfW zy>*KoeaYzh@cLuT>w{bhU2!P%05T*39XVdP0$y9Bqi|zR2Z&vQh7|rj zrvoeu2x*B8(LEgysgBwc-hWgG1HkvjFwldzAIG@4M?O#-+IO3ae<8a1tZx~3YV_(^ zC{T3FJ!x-I17KW9Li>?jHnlL-G#kBu%rr{IU_08zmEss{3@pW^)MrN7YA&O6d(xy! z3tf1(!N_ek<}nO#M?tkp8j>+&voRZxfGmw`2mYfNOb3X=XXL2a2Cm9c`f)}5BN{6+ z;7{jdn+=S?Sjd2PV4Pma z0P*!^V*v1-ajKaO_@R81v;*IhlL6jeAOqe%2A zaJWDQ{G*(V(W4JM>Yub7kO8G8+MN;Am2upcqi1&Am!m&!4$;6f-f9S$gaBU{=jQo< zCq~o&;MsDeGX^KcjDSmz0j0()2&Fm(qy0w$ARKvH-xj_G-TjBV8gnEWu*r9hG= zs|r8{f1sm)^^_rSZppsPKKZ}9vg8&ckyr!xhtZOA0GVldM1V z!e`BRZ;OER%mZ>a*sn{mUpGF%ex0p>av{62Rzdq4Q|xa{vA=P5*so8qU!P*XzLGtA zOtY+klVk&B;t`uaF>eG6TTT-jt2ck*JB<;_Y&+#Oz_9y74a#Jic?~e^Nlk2A5o8c6 zNT~7}V92W`Hr^6yP-b5$uK|XI0yQX;jpa4KkVa91GPxAmQpRPWr_316B`|(jY*2$T zj+oZ~!%h~qrOa+tUIPr9TGXJ-##UYf4EtNupv)duUIPqUUDTjV5Xfuf<0ymtXu=|(G*nHb*ZmSxc64xr;e_*Y;F}AKZC61ILZ(Z;1Xz)JsrJ}3+ zctVDJebk`ui8R2@lCM=cCerlTZ2ha_%o{V(#%BB7zpCICcm+XIY zGh71ouc>+Kg6%Z{ZHZHks+|83lP=tvLJmtQ)y)X#K z%qFQaAWlea-xBb7Gcw3G#w-3b`8w+AM*D_I&wlO^Yt9&<5pTD4waH~^#>7Zam;Z6b zK>Oz<2A^!d2N#*HXiOK;8_uW<>_=Gb4RK@+k(c}`qUHeZG?eu4nkEId!kUdafb4_? zItt&2`(1MY*$NAE6xa+Ce(Zt0(sr^0Ro?HK!+sZ=SAiS(%CQGz#tldcBrU>^tb;92 zx&2nv8$D))b(?`<58{* z>wxskYx%clU-V_TE6y{o>zWjae%i{QMwV&(_ z-XF8LGOkfQCf;kbU$);Gt5;v8j+iexF$Xo4ht=yr?N2$Xv*X$Ala4&RG8Cg?A%`LA z(kq2<`TG3+L{+%-jH|;X%xi^9&%P>L!n{tnEc1TiaGCS2b`8(_iKizx*O;C>}%@NN#!@?fL zGi+pSK$V2Orn=hOE3P=y#wv;%tJ2y>W!_y0-qq29q?l)5Bo5GrJbNN2wEfH2mzBw^ zXB?u1XC089d9CQ|*=yAG+!g1U*NM($-dzdaT?yV}x3~6xS?|sS?`l8sdhhGYM#I}g z$4=SaPyW9AUDJDQe7>%FOsq88E8{+T<*gX1d}s_}ZZcXP0c_du@Qhm=>OA{ahPpEE z)(sEO`*+vgt+UBHOFr03G}=%<5&bL2B})`x#Jrth{REg{t5OamFuvqI7T^XGKDn`6 zZdJ-(+o3U{Zi#K^`IdobqZ1vv+&G2=8nKMp2@OqeX)988#T`i`E_KpdB;_elf0el) zo){BbwUE2w&#i zx~SlJw=4?7_{rQwtuy0v^KiOfb~%ZE-;23gW!%D6aLIB=7?I&*Sf47?%QulQH;%|Y zK!i?itcdw0qW6!PRNr$9L>mqD=CsJ$|zx*Ae&lxwW)fs}DU7hib z{^~f1fE`x3#w~rSv^=!Jcn@@GaWqCFn%c@}T;|=n5$t)lEMmg=$=pS)Gvm)~P|*Dn zP>6%ivw5sWjKNlL$#PQ|k&R?nAFk`=u}GK{lj}Y}gckEyL~~eQ#yoQWVGKFzc$0>R zEN6xJtOBPLcO;D^$!IT0)I0S^Dq6BR;`ys3o0T`cy#$TBp1cz~||N&`QZqwX^BX?75O42&-~0rDJnJMggKWRD*3^93^CdvY?s zE>lFg0q3gsc-586>#jIs9Dn>2idF828uX(F4Nq;Fn8#)cX2 z``$hsV&0^R^A=T{H)x&Vd6e1t#nE2|0mFNm1ua7c5D9t;f3PI4#@IU9#JnbotK2|@ z6hhs|l;!uPQ=a|Y%E0#jtM03;dBg~@jPFE2`97>+KhJoKL(bHSKYnz1_G9tB$kc!; z-YvHYF*?|U0zI&w#HJ%AjZjR6tmj*Z4h$#|HI0Gqvp~zRV3G;QvD#yA*!p#*M4d>$ zSXo)9^BseqZI-FShbIr=Be^1MzGv)eq>n>J`Ud-*+*p;J<&~qnhKfJl(`Yq5psQ_Q z9H3}zx?1Ug>2{^_eXev-xB*@VFHaJNL~=kPfCQncVl3e}{2gk)@*1qFDv;7Pk%GWH zQ>qkvz6qpijWzRAO*4BDp}wc5O4oyo;86RmQRTTt`juE^5bz4qSu&?dz<(DFHwgGm zLuJz%CEjeLm4SO>8rcK*8$&4>@J;zkCILC(sbs(}pO~pEp%8F-M9l@fI->dk^MjOg z0re}V`X{^q_2Z}+YA)b+BdQ_o`u-Fs5mBERgcqp2^ z4-iv}@!Em!jb`ry#MY`<-v}k#Un>LS|I*ul9Gh1%;LGjahL8cSF_e-4e>NurysJP4 z{76m)`0D~0a92F&-3xe06BK7WO&3(>s7@8&x@Tu2#8-O8Sp1_GC;gS z$$+Os59tLw-cU*g{Q8^>kb$jaz>I8p8v`I7rewe?qPO(|uFYdXdny+6)%L*8MGu?} zh}TIHwYfn750m$k0Zy?F4Rp9saU9I9t;M}ji#dP@7E2rkjAVJc0N_*eK0gdUcqF&Z zVOZxm7Ack8QHkg|r?#$0lxDAQdXWKXjfp?Iio*p?8&aG$*sza`N?S0*kpidNQk-tv z9Zt8WINe^G6DfdrHz55eosh}~=u_r;B?D%%m(&T60HnJ0*IL^SGBfyu(l&A;r1$jvB0Df7F-2H&B%E`KcnGeK*fHjx|h?C!dz=#0vDj-V-;=sKdTLiO4LGhb$dLHPjVC2oHaE5_#ySE@g8q= zBmh0dK;E%hqbvTvtb%o<3LrD5+7JL=6GnV<_d%usk!S zJ97cagoHmJNlCLY7m&dzRDfIKIGqbv7^j`lum*VhKHV&{#D24V2BDHC?d#UPEBajL z2r$`+tV;l~?x=+2(HQT}1|&NTbQDh9FVjZ&0g|2uItq8@bbtiLKt~r4g94Jm;W2SM z8<3nb&{0^G(*e>QfsO+Cq9_eW-vm0J9R*}vtN&HO>cAg2oQx8{>!X3s0sQkAlP{SF zjPaX|a{w{DcfJ~+qsfgGSM_rN*y05geD0n!i3 zADE61)v7Fgs9E#b_Pc*$W&S=rkhDwQRJWhKPmku&*M&>I#|xLLwE1__;=f`aS57Ct zHd2CEGI$N4E}^Ipg8n83sv-L4`sn*H1o5^9saVwr(gE@q>6uPo(gTTi2%{qfRqnsJ zb%nuLgiZ3C73WziZtT1}N6NfAN6Ngb^P7Z`+A-4QaX2UU2~dIMvE&?p3>|4*-IcOe zzD5Rv?k~$@OgAw7Ap17xnRoE~varfGq9N?~D6De?I2YD~utTHk_F#-9ISTn_#tF4@ zOBfjhQ88^NFmX>@x5}3iY}#SNE{~WVkWC)#NZ?0uw*Vw$D;Y4mJi-l-kga6E?D7a1 zAk9&--DpoY?SYT@KwUOh7kU@?XR*CKwCzQ4=I@~$f19JKgl#p_o%Sp3-1Ft?^)VgX z^KELJSQTT`kQT~Pu5SBKN&At&&t{$CfZ45+l{_GMsgeP+TPI|I1w~U^ZFLnbbVMg` zzHcxWkYrqx>ICL4febysLbGEQ&TRrEvw4nYDK}u+BV=W}SB`D`YFqTH>iFMfHoDe+ z#khb!v*nN^Ie5E}&$<=f_br7w~m)uwBx9gX#Ps`xT)P%ssnl zU|U2D0!}rQ?vf9VP&zLX&I06CLqI+Z=NthnRaK?ln#rH8vsQ0jF3`CY{&p$u^|JMt1lWdBYH_M;F^e< z9l=6Z^p2qI%c8ck0ntyj?H!?nYO?v;+V2V zx~qX_(vE`ysj--vg_Af{}RIhcZ9HA(e708A3QsPUxhE&4-D z2}pm)oCEkjw`+)}((&uZ;a^?mOaX~!;XncDT_hmm&@f78pJ_vB=KODFN5jG*o{s$b+4@$gT_Ot?4I zZ#P?iZIAud+p2y`iQ5z2Ke6zp!wdMam~{;T7N+(csjO>91I4CVo0TCjw?$-H@j*(a z#2t-2X~1tQE)xPbnLCN%>zWk0ql@$b7A&@|naESuHL+N67QsAtP>@1lV|1rJKq5q- zqma8@A0QSEbQH!CT3H*h+ML+9IQul0`3l`2AA{=7J~0M{g(o#Av-r$wfME?fvGJxL zgEA(~YhYK#B{C>uVmRTDm>hb{j%9KQHay~wPY=9Z_G?`Ho-4>1_JD^I4?nQRlE;2 zZ{x1Aq&R@sK|K7C7@=aD8>J*F(0LsKvPy{yjNsSyD>sn=pJw_=u6Y>nGh;OE14LIP zqqlN%U2>T36OrIG)v8sBvQ)$6)WUyY;R_XHH)Cs4zBlxy(jHGwG@gYWNWCiHtJLwL z57f{FH9Vhytg9oObZ~h_bp{+7z0}%VC!{^slw${3awNbP#Ky1#hJpqr4T;>BJK*bFt#8uwALEOutxL&}6Oq>|D9T<6H z1i+6L$bkPTYB~sr36$H|Z7>@f9346L1EPr9V0N?t&zZ?e74R)qHzTBkVm0o~U@Vl8 z-8MkDDDV2u$YSaVjW;}U#R#RTW*`LvN^XmLq8dUNa!9-@mn__TvIU@>h2@GB#m9=hd+IV!R= zU{{>^`m=IIR}@uTT|VzHLahV*sNrO$hc%ii88G66tV-H&Olc z;2qJ$<^kSqC{?0&gc1_vjVWXAmp;UOCW@O2hyWGWmk`I4AEo*rRBqjD#L@Ti*cBih zui|DW++Zl>2D3+SgXhKu3<3UW!CtdRD7`Z$1T406c5EqwU33J*)|rm6;RaNPr5N5o!pms&ly!yv2ScL;_wHQGpvb-(o_vc#7rd0~q4(iG>#DQ>Ltew%HRCDEif)Ujkh`ql-c zZ(cx-wSD^Ptg=13N4!L(^8)L<+|c*mK6_?8)GB-G@&9uFbtU?*E75<|FCFy#r_r%2 zuQMU9Ga;`!vNkQzVWJd&@iU#En9~ZerONR=<1ku0>wxskYmF<2nAZuHW!_I5E_2@1;nMSd;^_&_ zLiMDxck68OC#5O7m&kBrbhye9L@@npt5RnfcD$23p>eT%PZQy+g)=Pt>5~jw)h(|m zNze}tAz^w!SNIq82S#R{sKEWMd_)f+h6c%69nN_IG*s0T&sYu69Pzv}EbLJ{!;V#g z=;_(FMs@WK&slM(jaBOSkT;9=QJHsFf_HVapbuHRN*rMOjpd!7=+@P7upYFE1ed+OAd<_cAp)dy$Is5*6nK)`{$8d0h#4T?u)+xA-Z`>rBY&Ovu~4#gCV_ z&tI~Tv(H~LJNV5p?=Kp=%H!{U6zD>;yil|MV`CjJo7r!S($gfZ--IT$;!N|d#%hn-=oWUcP4mOJEP~l zuP+-7ZxijevY$Np`%(i`S?}HRleby0;uSV>HnD06@nNg7#eVZ|9D=#WuGkk_V$tq< z=N0xd4AN_U6cG)mRwv5;o#~VxW#L9-Y_FfXe`ZyF5u0<<1o?gz#a|jaeiTuzfumuy zKZ;0G{>Us+<3=h~x?+_Ug=-k^fi5kM@MuI+TN&ZYyjvF)Jnxo8VHiJ|yQp<$e1>^A z-7lFH@sIa;)JV3l6`O+XV@4i4DbO13CF|{*$0Tw;>TnV{hu+p>H|a@ z4fW`9Wnm|)N|Pg<#j+2~c!9g(jwDjNI`NgGI}2jldoD2WZ8@q+?^hVT+vA_=GwMBMS z+LMyAE|EZji?GotDEf8aR}U=bwGONwNi7hw+3#{U2&dyoz%R{yDP!FE5W-u zH81n-Oz`eZ@UBkHJ@0*e*=Ts1Xv8V|$&8`6Dd5%jn0vL)@?t@uch6$Mn9D6c5iuc22(nU5M1WYn2Zc=sZ8YJHOt#dexN zc|5sFH>w;QXWBWS#xNoq$*_J}ua`z6;ee>rARs~~H&(~PF^C=?HzWrE|0tq*o@F2k zYNSTJw~rySeu^oDCRt{U4oKM*cO;Ra)d_@0o5WM2Ia+i((lZXx#@`1FNPi=+R_^E7 zYqas)73Z1P$^FW_TXzS=^Ok7i)fSZ3T2NIpjc2^q?cF+?{I8M^_F|Knag0@lj^iAc zEF8dyb#8|B_N^B>kig9oIidi_3shyhE`|<7UliNW!%J4sMn^Kbe0dCU07y* z)2I@?Bb1Q1XNM$jj^gG5B0$CUCB*H?AxWG>o(u$>Rp{N>(O($3LI_yYYj)HNClNwG zJVYBXdxX;eii3Ozu-{M_AtfGz6pn!ZGK!EA;X?=k>6DCPj9CWw&_x&+wCnPw0YDhZ zDYkv5DaAYzn*T?gro`)IvcRu#UqRus1ROyTXz;Wevka%XkfkRgy)eajX^QjW6j$ZW zUfyrBZD9rE8yAqibph#{7m#CZpDr)GNX2=Hit_^NEKT>>v(ea__SB_Nx&OKn{nwS~ zzv^2*zW+1}Ez9dn$m>kVtG*qypUtFmolW?lZ|;M=M22Id!&UCn5lla9RWt}xC9@~FWFgxXM>uQY z3=4nyq}~oXuh*n)*}gRrdJDS3zo~kjut*qmN>vZU13#Bw_Xtk%Pbl& zhJ~`16#|Ht7LZ2(_(YNX-bMS3|%};366%D^t&H$x-mQxYo_EWlFpQtfUDP@=o^Kvb_e*9) z{QFW&Oe%M;uoYag-6a??;bvGrooCn>DGcxd0|}SK5!nZb(Bf%IME@eTp$`ykG}NQZ zpA~kpsx(>UESBwwd4ap)jwDjNI`MU#N&HM~d(Y<#%=5|02O&9ld5cvYb()f6L0?N< ztg;B4-ySO$jz5C@SiD#`{s{6Db}^i$M3=9`8U=PBY54wn{*uF)RfSvfjJrC;x6yq%)5B$}D`lRpEf+cs=>)<2;PO!=~4o*^q!vifFjxgQ> zU0NKC(TJwDG8&h8w{8S`-oIB})H*Z1$OZ-7FBvnjYG)iTl^HYc43{hmh7s9FhV|jP zUdD`sS4E`;0TEg}IEm;3;@;yRAg3hdw9WJEDhg_(M!mlpLlQmJ88J(u(E%yD;*KOT zv^s(C0+V=EG{-D|Urq*uzbz-Is;KN4hiKzj2c&0SEBEv4HQIRYiu26tb4kU1&LWjLCvE~%!&3Z86jYSF(3l;2+iOK zrGhxX4s(T!u&OC2ksrAm06eRiRhDON06%CbWI0**du0l4gyiPUWoiio^Dlz$TH(63XwVE$`I)pSA|Ge*BM-8-cKANbKcb<((``e z$q3FhCZjUry=LjwS>u}0)Z9xnI59d|<)~pA{5z{sXL)siCd1i}q2OcUOXUb(|m)vnZ7au+;XQ3JYMm_1ZXCc4q-x zmUUKH)>&m)yR%62vNRrhVT$w86!&dwCEGuBVtH9!S3+J_Lf-BzZp!jH6Y@F}@^)`= zchzq%~geeZ8peiBD^f zl`Z|`@5NSn$oDL?%#Y)|a*g(wRXNP6mJQ*9gu-Ll9F<0oh5w9bGF%&X~m$$f~`Jn&v49l}a*$@Y6-#MGT({REp~ ztMVBntc;_u4-lcn<2ZAC@A{tL(!osZ+4a$pH*gjR+({S3ho(e zu=bo4=ULZD!OOh661=+-ysQ1V%)2weyEDPNdJX4!@9RbNdwg0mx3Y&k`Fl~LXj$*w z^N{TpF^oWI11rxaOHKqZd&RE4aDF+oP1 z#C*J~Grlpa`pao3Hq$EC$mXfSspggqL>TXpE-i|{=t3h~8G*~ZTQ_z+@86ToX`KOQ z*g&A;C5RB8o)R;I%B4Ln43{hgh7nmuhV_$py>uA~=i~zy5TV7hIEa3FY{MWR-(Heu ze>u;Ef*PGs@4aKlpwDtf%raTB20E}3}W?1hJ z^}+=bxOE|e9q`Xgc=7xVqTdw5MbDK6qK%GTbos#;Vgq6ssab45AX0Y49ZC89?&?(u zlJbWHDo^0?MhmK_k*g2W@a2~8TTl@r|IongIjSn+z-8Zu%Q8#J`1w8ha9O9h$Emh5 z(SZQ`!#EoIC)+V6-X|GwfF+E-~=d9CeR@Z3jg5FEa4cIqI0F zWmk{0Uo{x;iwr0HUuNL_IqIB0$ZCGieue5010Rj3S%Cl97PWX)dj|H|uZ;7<56n>4 zKO<5ddPoL#*{@KYX5hv4tGZ@H`M>@tg_J}5#GK<~3*B<+32?rllZ zfWu{vYRHw$p&=^0AN zp81Cvyxe{j_qPT=WWRE19Plt3ze={i;H%=8p7mh^8OTZoyr+YDjddCwEAt*89VW;7 z?`zO44Krv!(lNIdk>2Ei(%U>Bz0m^_s}tJ-5~ExmjnWH<;T`#*&-Cvd;y$$Sz6v2mCXO&-D%wmw6AsoA@avxwYv7Xh8Z18jwDO2BeRn z0qKKiK>8>ekUoqCq>rNk=>us%`bZj(K9mNekEH?WgK0qeXc~|{oCc(irvd2$YC!sk z8jyt4!jQSOnHVy+HW@NRq)rHst&PKx1b~X~8wzHA&w4IHFr|oPcJZ)zq;b}V?2~XSENO;=LM#9r}HWHq;vyt$$ zosER2?QA4GZD%9lX*(MUPZQJGOw7zJ{j#%>@U)$cgr|u?EQm7`hw2oVi<^x;K!SOo zqcCVeT<8Gj+?|bt=k9DIJa=a!;ki2-3D4cxNO$j@yd&kzJ5tWPBjwCHQqH_1<;*)$&b%Y#%sW!fyd&kzJ5tWPBjwCH zQqH_1<;*)$&Mc-YJM)f|Gw(<_vlzsjxezwR@@41Sk#fErDd*dfa=slY=i8BTz8%r| z$N^;B>}XI}99LSi012-;llN7wwaW2zHeOnA$t|gwd`mMCU$-<9@pVfx5ns176Y+IR zGZA06G!yZ4OEVE)w=@&+bxSi5U$-<9@pVfx5ns176Y+IRGZA06G!yYvOjmZvEzLxH z-O^0NS20N0CB^b(m)w$?$+t8U@o-COCg0Lb#KSGkL_FNmOvJ-2maGyD%V!VDo;D}p zX&X|Wwjt$d8&aOOA?0ZsQl7RUH!c4@kt5?BJ0Gg@Yzocx&_kGLQnDA4LJ_hfqNJ@e`1K@C2kEIRWX1 zO+flF6Oewu1f(A=0qKWIK>BeKkbaN^q#q#x>4!%^`mqs^eqaQo9~A-VheSX!9tgex zNr8JJ(!GF0L=iORy z-m4Yoomz3;rxoX2T5;Z^73UpVao(R5=iOOx-kTMNGqVY-IAC^x<<=7*F<;4mdn_>) zGC=l&l?+ejMy%q1ap-1a9^h|`o00)DV+a}E{z|*&Dk#7|&2Pz0@;fQY&2KC#&hMir z&TpeAj#0uWP#o}{jtG{KeBwwF*~EzGPK=1|#E9rljEL^Ui0Dp?i0;IQ=uV7??!<`b zPK=1|#E9rljEL^Ui0Dp?i0;IQ=uV7??!<`bPK=1|#E9r-L=cXptGn@GZfPhEhs8M+ zhj$W-6_;?u?u09LCtR^R;fmb}SL|+;EAF%>cZkFi`8TEZAvUGgvTj~@HizA9;YP26G2#-?|;c<%hNv-Q$QgMm!IK?}p(s_SWoOegXd2dvlcSgl|UsPPH zT#u+xK+qfmO4@lA_=9Pf-mJ3L4x`6by3rKdE24nI*aJGSSa}*|F zAswo=$|jp_%6LUwug<0UACJ3IbIZ$~x#<4CqoOU_DMK(TFnKrOo-~)uPTk+z6F%n^ zHc)}DFq}j+K=Mi1Q?-ln$M5ET)vgrg>y4?KavM`OZY8St~_6FOx={*n7Sz^1}V?i zV)^oXy)kuDZe!}E+{V;Rxs9otavM`O%`ecl-sy{h!;xkv5Ng*LWjkp+0M zp@h%YCI!+)p#v;<iooz+pO>gWG}^a(&f`V1f-eF_keOf5`&A{($U4z^Z42Ep9M zhwXI&fH(83;_{J{K|V}-K5`%eHiemc>|A=_(jVv0${T>ZVTCq{F4U$;(tB09{G%o1 z|7^eMr2LRXQhrDxDL*8Ulpm5v$`45-<%cAa@Za%Bh8HLn-Ru=FS?VT}c#HiW5GJJXtV`$N zBVd_EpVGMGfyP9+aJJo+dXN1c&{)MIGF^v{fW6JGX4T|^@AP=V>*)=Qnpi^z6>x6! zu7uI6htNM*(|>B(%1HF46jYUlcN&-DBbT1b4E%bIs^W5wapAEM8P0(8fpqIFaaDb- zu?|QI+oHU)eM16WT_tkEcJ7v8sh>ZK5|4|X6rXRK1^8-1iHi3%DExU&2Us}#bzgke z@XGvHDd4*d75G&(*{dqK+@w3~c^L#ME|DABG3Q)@_g&BXfX2m)l@}d4f)va!`YKrL zF-eVc^8~2}2D6N=2NvD)db9vDjjjh4I2*9Fhy_MMkHeMH1 z>jOj?mDm?mdnBsX2Z%BmAtm&Y=?1W_W(d~`#F$&LJ)SD<*! zSjHdkwl8-wH9=zO|9R6x#_^P+?2gup;+?Glz~|YntdaqrXgIlT1K3|61O8Q9ear{^ zrtQNjH{eTSV4Dv}rmJMYvts@-AMlfgQZnH0T`@ND~)0CTp1c!x@j9b`bAej@a}XHr%vOg-PWSDVli0ZDX3u@}qzaC4vKD!N8Bgl4#BzKr9&OD5T7ZGX=suu^dJaM)x!+ zpti&|z`x8}dQX$W=M53p(}L!tnQ0-b6`-+lOuV9%C;rlF2kBZ%_J^ zh%S+)<3kqJXBFP%^tO`yXJcyY+ic7(TWdDfIw&3+nE#J9L(>M830$-vff2`5x>mGN z?!M4mnks#`ZXAU(;tbZ)W8mrbN~}OfVU8gsU<1;$Ku3YL2_0aunM@tb385}+XC@Gx z0Wn9Q+Y@{It@X1o`gVh<91R1KLQ36&8sGL>ls1D>Ud`l$5RrIWlR|~W+jeUlA(7sf z+=D*H*9CR0O$^MF;~IZD@|fYC9^?7h&oGc^Cp&88pmH`r<%2PPl-yrLrdo{$U}quo zX0DS0e9~ga%d7>m^h-(G9oEsD_AWQ=z;R!+0zv|kLRGKY(-OHdby`T*{ey)onOUAP zv0XCanWoBj?00hGikK~fyWg(GN+7z;ZpBLAzGxX}tOSB|v{(ro0WemYXAzMw5idNE zwFnZCIJZ>>d5fKG1TY=fI6kgNj*rRe@iBqL-IT5_?{!8fpLAjWY2&Yr4>(DxcY(dR?vANa7KFgz|H zsH(QZxG=IFXdZ2>yP^yB0~R{^f!NW=6O%kp+0kC2Wa-a0ISgN2d;@>bW`O+~m$ctJ zX@nvZgVYB6$I+A&e{5)>1bk>TB}F_%C;^!SOgcs4zfb~RWA|c=lHw-}EtG&v8b(QR zYD}i*0MfNaNs&G%?orSMMmpAR{{z{Kn0QJ1#P$cqJ^Q&wOe$I5U-#YcG_8MGgX(n2 zon~lX9XuW4s)MFue0A{jlB*7y-tyJK({-*oXu8l>2Ty;x>Y(XYUmZN1?5cyNvwd|x z#{KoGo@Z<`<|KElTZI@PRRCEw)f)N7TV8gyMP%UvnCIn}oCJJv+$rd%$Nn(x0Q8fW zpAnPren3{N68leLGG`uFTvdBdGd+J{zw*8eKy(u}-N3n?v(WQ7QO{ZE$!0J z_cXmx0c`p2ygL)TI}^OCpSF61 z8$^Yn_`#Sj4_$7X&u_Kg8l%%Q9_`QY&aj?+JumkXiXIJr#d+>^yu8di@4B3KSAutS zcb0kQU6=FjOz_^ck5yn=fA~*Wu)SUx}L(Ls)iu?35vtxT$_l zUn2a&pyLe+1E?Z@Zk9?&U3GmQ*NMhUc#k*B?`n5yuqeCX z?zzfWEl3Q+$2=;d_m8d00aj&_?C^}-G@y{eNmAvqSY^n2g$#Tj_XLFw{O$!^S|8_qYg-xT%e-3`=RNP1#bOxmfyewddZ~4m zoNa!d`+G0`{$R}8Dx(+Xf=iZ9!ia1q!}_sPFZV>k8{)X^14O7ilPvE!l0W&x3ZkD8 zv#P#7F%WGu;G@fkT~izbm|s7TFLD;ka!&*zWmnvhM7mce%JOL0M`GJ6AH;d5k*>Gj z{Tniq$m7->M@dMfW&HXUQu*Dna?ec@^&O_y=MNlMSh_2a%vid;^V6`(>Aj0Q~w$@FUlhI&u90S7&^qzdBl? z*OX|p%AA%eFOF4OG$LWV2fDOACZiOsZDmX@^KM;C_PkpbH(~rF@1@pR@?i6GJV1`x z6R}Q+`Cw(F!CY|3@>Cd+nPgZW{OaYjNH{i*%RWGa7IRue&x>v7yVyXqDF))(?3&_; zTKxLxb+ofsmeV2-DZAp1BvP|Fv5)hi988p#L`|A_#O6=TtJL)vYs3%jcXHz`@xkeK zI|y~C{mL`5w~Twf6GyO!4ib6=tsxNntefq67h3)~;tS&Lj2m{-`9qK4qs*(3FN zEikvohwb%ioLRfRWVpB54qRUAFAVcvr7N$nnfoqVBIk8{XXaPv(GS@}`uUaEc?S5= zNgqBM-#R}Z@RMddagWVS3ZFKl+@Ar&*ny71uX8#;%p2$^92HNz^Z;VeKu6&^v!uuc z95F)$ItuwZw(rY!y)Ym)H@yu*Wz1K2;o9aV1#Bvh-vKg4Lgleqc)!LK8?GET;;sBt zwerLx^pdx=q=}05_Ab=$R<|17@`W1S{#L{HL7|5439I3Iqfo>5$$pI$+790@g&Mwh z3YUBz6)yRnGC97t3N`BXSuwKlEzxlnujM@)`x{8q7JsgY6m(B#BF&q z17N{pZ%=vb?M9J{YU0Z$ihfH-2^}CALZG8Sx*&9b_Qd5*eQH))7;SA(m~Kc(JOB$V+FEK+s7#v*s%`a})k>!mqhWoM z(ZCRpS7rge+gw_-Sl^`Z1w+c)UN()_m!-`#mp&tUd+&gO=jN!_8Mr*6dI0|}qGkg! zGJ<3Z59f4%cxa%baDk<2(h|Uek=Li@!1ZwsEEsux<+~tK6W+}hEq)ZEMxXDjU8T+R zk1l`q;@ngQZKmWPgUiNK_GS=m31m_RTxKhNS;GKgAl1)D<-iWJVVHoVz-+IzfeYhsL*;8~Qsa;TbV5u# z=Kx{^QR4b01*{-%Isv4?fsO)A6}m)AuaAL*#)Zlhz82@8If;f|zgq!^hF)f~stDZN z!0FL8AQSp-ZqPFYgKze(x?8i0^k(DbHs5WqUwv=gKO6jS_A7?G&%p69hnjPNflNC> zMcVSumUIgW@cxJz0wkjmD&NJb8UBrd6h|*%3dQ-qId=csYU!{C8eZ{$^qL2x zS3MxB^f=iFUSq%Vf?Ys16eOhrWFtXX|IgXMq5Byc`f}{S5lV%P&dp5<4490R659sB zIuz)Y-QDdechCSGguloOlRD*v@)U7hRc@eihq}za7yjRfJ~0=t$h&tpc=y5khmrRX zV3BwA3)stg&xZE}k@q~nBJb)~t(SSvfj5k#kJnYsNoSfORFYs~-}$i%^5cWa!g3w^ zn#8W_(DOSi-xTFGji=CvF}4Q~j}LSSN8dCamqznInJbV%UUlwW@a8$Gw7EH8St*%o zK-T5Ntq*yC9grIz!snK86p$!%$m4E^zM-kC!Y!43cal|t_3k&O&xw~0K&;abKwyze z?Ye|sKvH@^4cpb@Vh%G1$kZSV<+FJcMktfJNNqqe7f30uj(Oam_X9|A1p*m(%D2UQ zX3*y|kXCg!>FgD;jXi97(k3zg?c;oF0@CXpkY4G4^y&po)P(E);`zA-m^L*=s%C}8WRkCK;I^f*6H0Yr{)AE?HwfQwGkgLhy z0o)wJ$k~8jCS{ZDjb<#w{OxQ~Ir2EM_tqwbJgGYykmN4VQ6RmO_ZS0Wu|S8-=#+r; zRtre%#`Oi~Z4?j<>7=B*45Vi5C^`)c(qxOwy7LdEF(&r{y>B05O(PVy;Kx-e3>CiUn1U?_8@*_Y#*3 zUDXm=Fv--Dmk~~ycu7ZmjU;$o$*F zA4x$@y2_gR-q<69fZQEdGGM+_D$@zK1-IulpKkYCx&Nm%fnON!#SXsOz{~7c$$*cw zs3QWV8pu|Yk^!^lBxHbWKPedjgGHa>*ps4n6z46jIB#Xejn%S~8}Tb=BLvM)ScE(< zzs5t~Tw)uuSlu_Jc#S5#*7nbe*L>58*Q%QHXV#_kr_6JJbf@fd0WOF=I~$PR6e_?8 zv14ZgVi~b;qujBxiOqy%CG&qi?Zi+2e=SZifCSFXP19jfB9WB-f-uaG>D?j$Y>ijDMD zaZ;Vf#voC#MgsX8CrfnR)bP>*(#s1-FEJpi+UI5dHrppp`fh5B_y%TJ-@***o0wt8 z+D3i;*GpBLm#H`}QE_9Hx6h`H1|y?YHq|Fe%YE3D=)JxL?av{a2F!bh(yBQz9L)miK$%a%@k&PNM9PBZdYE3eHQ+T7s%-if60_XpVT^ z85Z^^o?*u-VXvvKzTp*D9BN~gIzHshqJ326-Id^79WY3md1h8Z0e$$fI5OgD`LAPN zRwlNdaTa$y?+nW-4)*n8w3nc<*Yj7L=Uyj9mw9(3c;{;uG_Ny!%Dg)hyz_NR&bvC? zc;5TEGeiV$7VW08t33I;^LI_}`)#JEGc3MhwBNDc8gFK&%D8w+r8?j}Z0tEX(6SNY z8Mi**c?qoycxB$L8zG+e@3hHVXO{med15ayX?2`>E0fa49G5IS%$a zJUyyRVj+Dr9+R6#yE%R)0{|sHQa_{ejI#jad1qM9zFtPP`(7WxaRLRSvZg|A9F2 zE2H;`MmpDi^S6kCd97WMli~W-BZ}`RRRDwZnr{(B1FF?Y)n0DG`O1wPim94J)>@To zV{^g_pD6yBp^I-31xLebzeSX$+-gi~WRg_j+;huDIgIx}m)6I5l%ln*jPqsQt&8)X z_wQRTwa$_oY-r#CvinIC{KuHLRYotI8ZKEr2_v$d4C^O?dbuYO?#PESAVQ08Ttf7Z zVjKE?WgyyUz(<$A9YgN9(OE3ZJrRhMU2#Ve>0X^Edyh$cIJUi~D$0JtNVnSWnBF2v z?%*L z?$p3m)_eC{hvaDpM-i$OuZ)Gk{FJ;RDUMOGA0X`;Q5 zv?|~pXiSh%C$1mt>ePCRD2mOu$~AIYswD8zU698M4Ns@5h;SPO)E^5za91*>;RUPL51E z!r(df+iaX;RPo0jCONdkrgP*vtNs^}&0wr=Kpi${@$tx}@HdUg_wi!Id>U`RM zn~hn3hec)j0ntw^*a`eoBgtG7y!J$P+46{%W^`% ziwz|w(+0sQ^Dbnjb}86e*GczdxFiA}6MV5|CkKIuZ-` z^)Z1F{CXqE!ZxLg4O=5~U1y}%+wbn2EuiiXqu6;9ZG3+?j`Mkpx^vLA_cRS=ZdKu}%*L3#Ot8oT&?uAnv()BQHP;U?>++wE6U zC^~ahoHFLx#rWg>`F@KIOvI9vx7(C@c${s|InuyCj;KDs6C>&zKqAfL#^v#Ihwn3$ z81r?qyZ4&bdB~epHt?*npU*1$`7BI>d|3@gn;76tgww1>gw~&9>Ogsb6XfKWojprtULx#zj$&yUjZWe zDiG0Ef{4BvM9gJxUlAPed_9ontAR9M3#9okqUjZWeDiG0Ef{4BvMBG|MuqAyxkmjp_G+zs(`AQ%y zUma#~*VHX2nC-jseZ^q#_w@pjuReA9_reW!!H zA@MKykt`tPa<7Ff(8lSx-P?C=_p;`m!*i^A?P5m22Mno6z~30sTmi)~+$E1x;2pEA zHuoPVwx3w)6Esny&`ZZs!*JnQ6H>(!S4Gl7O}`?J7uAmc~S>(wc+0HS@TlBs=Wo zW{165w$uN|Y^OJ0$KdXE6>t%QvWE^4=&QU@EekXtNxRCvDv)xS)z^sH!qjflV1t4v$26&ywFCS^X0!Z^UKw5Xp zjES*K?sdwUym4|ie|tMZLcW@l?Ym||xtUY=)v>jVuJ4vXC|xE4y__bfgmYU$E|Z?m zf-W=yuSmegm!Ow0*}NVGX+jg_^L{-{s#VB?j&>lyME5+d3f{?DZRGDfvWWC0X26?& zF@r>NVrT8JH_?+uS$znBb?yhljca57xV>w=i zfY@E*oH0_0|0gu2Xy@xpL|jkmf6aw5`(rLqxp^74xM1<&U_+5nHbImu@Rv z0M-QEE78>5{hF$HHb28$KWP$hmLW9=c%&gU33vjN+^f`5f#28_%2N#XOzW!PLMB(G zwr7*rN-gMKsRi9DwV->SS|BRfAiiL0izjdL6(FLo0ug;Bi0G?9#9WHV-w_l$pzVA; zkmjp_v_rXhONLye0RxUcF75?izVC{cr%Z+6(k?Wmsk+i#) zED)F2#l)bT5nXz+^a>ayyVt9!ds$8Qa}<@oa|am({Ll=E4FVS1>j?sG$0T=@lnTr< z6=-T@@M`|XSewhwC$hC{rDk-m)Qs+xn$f+R%@CC&=I3!;#V?-1ldk{~eHDo4D?vnG z4I<{U!!*whXggmIr1@$f?XTR3ADG6RBkkMEH0B%uB`~<7q^K;7iBhFCk2MXPbCi@n zT_iVR;1+kTdiz-t!O8IEfm}Fxoz>UWt(CP6#bd>#aJlG-w5=_ATjj_uy1loOGc3Hp zYktX+pRKCdvWFT6X=q{4ZjI+`@R6LQmcL5^*m5~B$W#x9A0e8@#3SMoa~V`5k20B^ zpP3NiekQTyiUjnn-f%bPCc zIZYv;ya1YsaP4#97=*rIh;-cuiuMyNFpa{z6#YGV#dcj|J6Yv5fxm7@s zjMbmDdh4q{TV#uW!fuIxuI$_|E>7jbWnGGIBnrITDBd8T2>+75xHyDsCM^v^zJN!Y zO3xGUG(&2>oIz8}1b6?PxQ=>E4 zh|(s|-EZ(Ll*jZ(nnJn#=Fc?rTwY3ME` z=ghyJ?IJI;=dsoj@BY_jX=25e@OK`sCJ5{KoCW_FEKL79>IV*ywlqfdL&yJC-fi&9 z+qil^$=@{i3Adx@uQh2Qq?CZ(afl$;(XeMg)%uUO@0$|o+J$?8f$d3ex3_K(9k zE3Pu`VfYpP27NaNn;EGxgZy*>d-8b^@d>iQoU6?j@Hjq$B0fPbW+Lo$J|m#{nMEkK zjFD$uq9DbkTKzn>rQ<3(nCmjp)=5Co83y4RUsa@ih1EHezu~oGUnyiWy^jIE6UJ#J zO>sj~Dz`wuTbKkETpkM2*IXN1Am9Kd5uYGOSUv$;c?X901UZq3;5`EV-H@gWcrh=L zDXSodl^B%;lp`zR6J)Klbg&?%(U*tP=);Y58x}EWn>^?K(&rg>vT5>J0!ovErk%lN zcHch6XtM+qd%_K60T)>=0nad`RsqGpurQm?8=ghHs{^D}3_fB>m2A$Fjag?2D3&B; z1qqBUhi*Is3eKg)M*%KFdvwqxtAKoGGx+%ppJdA1W2*cAw3 zjn*h&KQ4qfYL>XPmtxNts4cDHY7elMw^Ch6j0ib_@oO-e<9+wG+D%b|6mgX=KqjE zd%s%N>!yIM33M{vz)b8(9%T+T-E*#h;w4a#O))MrSGM`Yy6|eV*lLQg)m#CkGr-6p zpmYT)K#(g;))oQ9%us-I75TYoAjNc*O~xt$Y@2lV@-Y*Qu3IAgK~0cYERxl0K$ z-we!+0*VDlo*>Ii%^SrSw&o2nVY^F-&xu(`o*>^c;iMtPMqNC$6AJ~w*4U_%-3Er- z2{LODWs&AFqOS%K{~0~RNnm&q*Vxav zMyr6*o1oU^0!z?^oGl!8f6CusFm?4446o;JVEY4u!_1h~Dxd^mEI?qf3gnbVTj@K%nI3NlWSWF8!eZwM~%ooJhfK5QB#mm14OGA@AABe5Rm_(GmB)Sq&I)tb} z#BI^zDxM8i@>HWZI6cUGrYbY4a<$N8hEg1yZPJ8xR7^gh$(+T_C$uMH@(E2G1_s!I z6e+^pLK@svQhZ<9%4Evd8mBTN9PdNz;M22mwM?In=a>L{4FaCZB(Qj=62$hGW&vdl zLwthNnz-34ptvIO2_nM;lq=vG_Gsesot21U32{*(3L=gI5_1`57iQRlzhOufP^Qb! zISK_{W!VH22S7G~rQzYwO~4bl$0M7-7n>;1EInQ-i);dKF#Wq(K&c_J%Yj{U7!`sbVrX^}2Jz)q+Z=Dg-A^4aF3pNZ;ZN zf=c(Y8H6IeEEz0AIf6<@vl)aUT`w7&j2ZmyXEXSnkTdul(Pm(`Fkk+ZNcusFJ1#g2 ztgIL*1o=G^AqL5ud4nbWg~9g> zX}W+i(qUW(Vw$kSY}z?Z*kRj_A>WfkS(!{8kwh7N-!ujETF8@K#7~oqD^L%;8Oz1 z+>-bNk-7q3OvBt1w?exqXK0s(S!Z0KL9WJ&GPrFlaKzJ6aKaU8RpDyE%glaelYpYO zunI2KK(T&3gx7C0q1%?wkl!BCV&5{RZ;)b7GBXpiL`|6;=A7I7(xzgYJo>+6k+z2{ z0%o~Et~!b7Wd#R5u~wbW_P&;<>#)@!pe)3QPY{`*1D}AhIwL+=pNX}I=(i3L{iY$} z*4CjoILplGWmWMIk0-rsnoRp8Nw$C7?0$9JG^y1%ZhJS)ubi8ft2)cs`ZpS{ZxK*7 z?jf?53;d*Idy&DnEXiNZVNO}a*~tcnyJNKY zmP9sbZCS-3Ethqq+A`sRJcWL7NZVRD;Ax%87evHukhIxs<4CnZ(q>;!x2cHK?M`k# z3}SvJKPY{jTTVKt(^nthq`W$jFfZX9T2wd`;9* znnN4Sy=_q2j7~$^?hGI7&>9#% z*U;K(u4GvL)(z$rIK{sV52^@wU2j_i+t_^hy-yn9W#&N9XYsV?Tl|eQk-a|`hcqLU zfi20tOwJl-?ifu)b*Z&+Om=m-{23c&4)meqp&Q^ie};+{5>z}CMqD2}MN zT?CV13^rb0VMo4#Lz!k2>?x)Kqkv*)%_!LMrj=U-lsaj~Tx}uy`|oj^!o_R>pW=Bu zM1U@}BTo%iv))9MdhKE3ahH-hNZ%q(zjG1M?@2_I{xZg%9ds#Ki?`ZEahE!skpbL; zD7$nq=_W*!=6;SHj)>h&xWG3d@#Sm5%a{>+fWXpYz?}t@dr8P9uqX>`qN->IBmwtz zx|qPy*m?99X=#av)O$JBiP2$<-GdKh7n;M_hF5vQpK!vKz+!LM2Nf_bl1cQ!LZynL zJJRwsa-8xK%weS<;1CnTYgY?w>)8AYj>!{wI71BtUSx*2`2yZxNX-H^80*Xza0ZiL z(bW;a8c%RJ0tef!Wft*mVfEcx=;Gn`v8M}N@K2ZyH5bq>&gKjFp;@mr3m9@sf=&XC zHl*fh3`&E-9}B343JL1AufQ^5fhGceQB6LLLn=0s!1tQdyJm?&15Ly zZz=Ts4Qal+AjIRmcR4JA`=k#jYO<+J8v6Ew1EYOzu^TW8TIXaYQAq%;F7_7p&86` zPq8lGg~C<*jjxOdEKw2l6xl@lkamI*^XO(=D*F(+wrmv=KkYj+d0b~iz5cN4Ul z7G}V2Xuqsva3FpWdVQp4o;DSwajM)m3U)twWOWQJbCmpsn0$6XK82F`%RXdf2&!3HFQ_blBRo% z;0iq}cdhKUHpx!SWtewaX28>adc}%inH^w1kl=F@hdJaESo%^v{YA>_Wy-U%-!Zat z_jAdAv01Lxw2~EV%nxw<-Y%LJ*T>XA`Oz(q!|kX%c*snuJ{XZ^zBokH7KfmO=jr zA_hEG3wdwT$~kwG&R|xtD4b#lDD{B`FZZj0v|P%LVbQV?3G1&;wStKvoQS@3BKk%m zVy-e5@m}NgX3w$deg>blq+C+^GQ*FZs37p2riV8Oc)ww5%LqK)9J|%77I<%_LAMpK z(Xh2;1pWng1dLw-KW%7jnU@)!%%+64$Xv(pcOBZh41Zu~wW|f*l}|S?ZzIDq_!|Zq z0p~hwrFE^e0j1ACe5nz*$*dvg3pm^?i`r@gKGDoXTLl#NL2170AWht+ z$VSr|3A*AZ$S3e<_6=|&0VgpD*#!QkWfRbexiv8{wij!%~gEXTx@2sZ8iHbyxOcX+iJvt+fC4Is}We-6^am0 zJQp?by%uTWu@ZLkwB)Xs&fu-HyY+Tw_8VcDa^L*q~GcReJ$?bB6X`kBF0!uqVv=vZd z3`&#s5&I)e3@`OTTE1OhDuHj>n*UH;DdR@SEXV= z640%qz$db+0^1i|?Ms|7Uf>lbZZ!z_xFIzOC_^7iQ(p`GagT_84pl`|ZMH zX&DI;O!nhElcjambBti}>k__s0>I?B#*jcOjlrz>HbNBkFQzWXB0_gh1* zjC0h*I7eNKbJWE+N1ZswPt3}otxje(60WdZX>^$gAWd4%j_qxA{vd;V(wcT4Z>tmQ ziY3u30!vWBy!o2<4rX*)P8Ntr%O$6o8KgbI`~v=xlb{E0WU#*t2U3wuX5!M6t1J;L zZ3KT_@TcXg1$&%l6%dj;13_ed0ewwCX(gRoFxk7M+=AR{w#%9Yl(r>4Xfn(~P-{@MC5W>y`xn17{=f(<^wGDt7)VcZ#e;A(rvntpwheGC8F$ zyvtMEtVEfT$+93TQM^UGFssa5wHeP2A;VW5fkEPr1OxQa{kgtkU8JSUbm3y&e7xD; z*Mn9%m_^^h-#`+{Qe*J>T=f)XhZrg1%qFLQ$)JW=YxB<{*D&Nd2v&J1?=wmR!?u*H zshs#zEAhvyCty`+VADnC%i2O_PY`NqWkUN1&t3B|bOZ08AI{%+ur08JYLp|g&o#2g ztQJ`2%=wfj7P*eggC>(*S8JHoS9q~0hN1rKTZV|;P1EX|hWJeDGT=9|uS7C98*h^M zBLtI06$vd&&Q(Y!yTHe0%Q>gN9?xOmXJ*AaFIOpY$H3aNxx1BQxG=(egB-vG${p#r zD zXv3Z$16nihI3P^|)oc!lm{(v~q2|+zLM&PfRErhuOUTh50Rx1iRCndEqi?haRs}*C(sE$R*pl%J=Rx1Xa&J_dg1e7{r z)?Af5o_9GeGzU0iRtqc>O0=oSR8G_rSR!IR?Iq=1XUem(CmGqfCwY>;%xuZz>L)`^*wmIa)($>+B9KNdV&7%(QmeNpG zbS!^=9!Cv4=fqTs!9# z%z8HHe*EoSr4n)jC+9Jhy_{L4sZ=mqKxZ4HR&4MNdoRXEfvfm{7Cc(OvG)8nXBhnh z^Oo>*4HlTYGC0kWav4*8v~C$QVn7vmCDXth0`69>X>b~sujHp4$pUYK7}@?p1qHs6 zr*dG`^k)ng+5s>glrZaqzL;E(v&pEX1Ia)XIH|G5w!;d<&a_%K{{Ed7UGn}$s znO?x|^f-SbUz+{sx<0xMk@gJ3Yt2ljE&Y3j7u%!z^z{tiPdw!m_7oxtvXY6|Up$W@ zKHsH?==&5AeWxO#?^Q(f-HM35UlGxFEFylNJ?cUJ2Gs==XCpq}+lc798xehfBceFm zT#lMVl<{PanE^C5vU8nb91iY8Ff5Lj$K*$Xn(H$H%O4Pj*|>n0n&o#}M&SL-Dslc4 z2Ayb=k!Ul+INSWS+^HVmZzw>jdy*Mf=AXx)y|X%7zz2;T=0D1ybWk|8&A?0XejjDB zbko;O*q{GC8|_p6#7g3_4vt^KGWRYuPq4 zC_Nu~d`4i20w~S<_!FDB2K_y6;C*NgVVid0hICqLw6v7O0MKBx9|Djj5kR^-(xkUL z+<_q)G3Uu8K6jry|Yos7UksDbl2yirXR0 z_c^4A!#U%^Xz8AgFO81zrO`2tGkR@zFB$E5M7Ll0igSri*cA>o`&$bH6qkU=)2_rP zZ0}tlz4sTU_b!k=BsHR}ewB#m*NKRJr8K8kt$ZB4gli)|u~}^2uUIX#Nz5acKBb1@ z^+NYOU+BK~3*GMlLic-t(EXkubiX$U-R}`X_j`rV{hlFozjp}T?;%3>dx_Bfo+5O= zw+LN&j6`~&d(E7e_lgWVS~R`LqeZzH8kz=hd>+T&Fk%aMt0B!Q<{mZJgyM#6QE4!{ zmADtIF$8ov)TTh(ZErIiHg)e%O)(v6QxMakHU%*qYEux?p@7r-PG?$l;ZhSF1k3674WG%O9p7GORNulpae&zq=CA@2f=gJ1P&jv&U9I)WHa>Ih;ysUwK-q>doQlRAPJPwEI_JgFmy@uZF*#*;dN z7*Fa5VmzrMi18%&EpDD|J2QrkxB%A?=SdxLo&=oUCm&BLWe+*kcuLD<3_fE?0?LvH zW_HyAOF)Nv`2yB)Y)3YM?F6b>K#5<-<~tqIe4j&_?{Y}COQhBV*X zkmfrZ(tKY-n(t~z^F0k|zM~<{_cNr4o88NkO{58IC!oy&b~q#>L>yxES0S7lS+F zVsK|%4DO7J!JTn2xHB#WcgDrw&bS!d85e^)<6bgcwjCz962MAF)rNLm{cNo!*wX>Cj-t&NGKwK0*jHYSqR#zfNEm`GY16G>}h zB57?*B(05!q_q-BouF156Vz%Ys5ud=Rw9^;)@XYPM6%G;72`bX%{vWpJVr8OoM*j? zah~-m#(CDO80T59Vw`8aigBLxD#m%%s~G25uVS2My^3+3^(w}B)~gujS+8Q8XT6GX zp7lzc$8n1FN}NL4pX`~h2gun5Mikl9u;b1Q8Fy|nZ^Nn$xRoK7;Jhd^98BaU0KuFxyEg7 z-4WNXJL39vM_j+|i0juKas9d@u3vY=_3Mtfe%%q*uRG%Ubw^yk?uhHx9dZ4-!}M$M z0C4r(f6K4C12o1sz#8KKvK$BDYm^}4&0cJSfX)E0CeBgT#5u~EI7e9%=O}C99A! znFxH_Gbj^Q;)@wj*2Fp9nmET>6X$qq;v8=czh+E&s1V2fia3W_5$8}V;v8y4oI|aMbEp+@4z9AHJ91FYBv2bdM(09|no&=uzZU2zW373Tn5aSqTG=Kx)C4$u|n z09|no&=uzZU2zW373Tn5aSqTG=Kx)C4$u|n09|no&=uzZU2zW373Tn5aSo9Cue^7U z0JCEpV6AZgxpf6`?7vsAbYLY@#4KCZ#`zc+?caL^%ZWQ{+6t8{_tZ zH^%J+Z;aau-WazRyfJPscw^jN@W!~k;Ei#6!5icDf;YzP1#gVo3*H#F7rZfUFL-0z zUhu}az2J>;d%+vy_JTLY?FDZ%d%@1~dt(r@{N89Ck0F1yB!O|MbpSt)pG98%ozFcY zkG}`;6mJd6FW$f%4AJ(x=4_-XSHU9X4VH#m1tR8V7K5~{l>@gTd@*@klz4%)5N#lf z)J2qmYUa{qAHJO;KbnmCAHxSt@0tUr=>p3B1iXYJ;2+J6ndt(`5ftp`R?C6Y_QuW& zfn_%X<%sOpO&g6_EwF5#Phk^% zVocR4px6htFa#94z-gM8MQj0F0*Wu>apoq+miD@nIikGMTz6^~@Fpffk0z zpfkK}Hj&~5zS9nh3it_=NM0^S^Ht4$ljSpB(uu0ssX`T za$Z(j#8Qsn@7}>l^5UBLS$au3iFxoy!~6InoYd#Z{IgubtiLr`a=utOoLTqa@9ZDx z_N|ef>Q$iIxyle`sO4|i+7&S3aSH;8fIXO`w{`_P#WLn9ZUi$VO_q7xrN~sn2=mP@ z8irfJmt{QgV8QNRcu9pObPB>k-E=dWdXM9_Bj&{>$s3f|-6bfaKQ#NcmR68feUFUoy^_e9=hDCHoR)xPia(h-$)m zA7?2Jmf`Kpj{1Q^au)Z$mG>IfRT@9u56)pfcKn(1nJ?eLM6k3CG^a=r-_4_ieJR*- zzLpe z(lwA7|F~ukq!Sgk8A=@{Kzrh%EYp(;?$t*@?iA#Pgx)O z>k9&+QeAFe5`#(rV?RQY8iC6-B6GRwSqI4#CLPl8U(`(lB6Pr8(ze*lo35ZBC3zb$bPyc zP_~8(1#o+tsidSwNt(19#rX)?f%Acg9jQb#h_2L5CNtt#$j;;sAa`_`!s^xb!)D<| z9b>Zx!7es08go~RvK~Mj+Xrku0mSTPDgxBqyRkySdq|bY6m_^H8MiZZ#_>vBxNilz z=AJtTy;Sd1efib`KSt4qm4cul8HD{b32WLoHVbVU8w}`SQ=6-T zF?~?btdiL!GePe35(*_PRccJ1mVQ7@B6SAJ#5S2}=)^q>g(H17(pe7WfWJr=mSf7? zWH6v70`nXe$~+%ZdSJ=|kV3qzB~+;(SO{8Dro%4!stT^yx4aj$!6JYa!;3EldRV@4 zUkFl%Tg&K{Il{LMc~B61#aJeZmO0W`hR`Kw3R~r)#sV4yON+@sL2$HVDXQTyNn$wG zFAN$e2#&+*Ygfghj`x|^r-R@G(;lS6iPq1==TCC-qDCj9ZLH{1Y>wSa&@)a&YufZ> zPIgTlS%Ll<1Z^=XL2#ODP2KBG--F^_@Ozju>HY9R9z|gs@CP)5hkFC4eo$mizM^SB zNZ_)pe~`q94#Z1%DEd8&!h-O4z_R#}hxq#i;iX$lOan!_k%~(l6cinbsRgmAI|fC^V(NCW zse^+eoO7%FV^c>5MO2B&PO8?V!KM5PB`k9&wl%7PqPH82L-hiw@( zC6<3!P&5uxm&K+I2#RK6>XmM)@r!;z(W%{1jrnVXqAM`=tHgz0pbfS}5bO-X^ z;83ha2L(k>W9p5usoMobf5p^(1#y~83yONe0Ika1RAU>k>rR+DxzNdLQo-k`M@)B8 zwV#hFviwEIqlDcYiq(8-P;?ol9_OYS`Q;p2J}!2o-G}@;mspDRRjBEUnEH{MYJ6mS z?x8I`Y~CXBvMdT&<1LqmC@+;dxlo7jRj2nAHABeHqS!h@k2`V8spED3ie@L4O*v3d*hQki7L*pcX2MH8h5J@rqo z_9QstsFeB#k;KuQ>h9(y5UeX2(~ge3f?3_Nv4<1gwNh3U91+PKToFOf%rf}(IyyyP zUiOJfU!~|g_Rnw_p1wu}7P(gGlww%Nr@yH}O1T!1Z>bE-bYWQor1W*_H2s(8NW%5% zOpQ_6YSpf>Gcns5b-sh$puVQDOHj&p)N%*=uDVoXB;`i6!pZkNwaUT1uddPd;sQR!r%is)sc;0I@q%`MKMnl~!WDpQ-2J*VzfbuM+T|t1iKdMge}W+93F)h~KX^ z9okRxKZ^JRstT0zd0K4chn}q-$i_*+AR2|h`*;YQ&=A1?*sm0Eq`n+r2h@@0~NLJL5P0<_)8i; z6Y;;ROwlHd--`G@ROYCEXq>$4LzOw5aq{Gk)pl9_m*@dh_Nk!Q=M4cK^ryzuC2f>o|)DI%c zgl13O66pX*$gPo9fsorGT`D0zjPzTDg#0MVSOIIJ?JV-+sN5nyi3V8Yr%|;e3i#{aEyx z#;8W?qSrM>E&iM69S7@-HsZ#55L}OS|7{d*(uo-AQ%^-7Ypl30U{6P>hzxT+V$Vc{ zg@oZSkosM;qsGP}_FPn}u_F!6D=TwZ1Bx!p+&wG9cGd1 zqD6#UfUf@kqQeQHLcbF&38-;uQbTm(kSO>I&NlamNC#U=*&)(%JVJJibRH756SpBD zJ4ZU$QX7uu2Bkc;9QFv=HR@r@85@;a#dhO>NNl@Dy=}@K934q?9Y;rE8^_U+knvHK z6+IyuXa(%Wag!9C7!9#(dvg#a0rk;vo3c+dBB)rvOUl$*6(I{ddUP|GmEbTKfX$gI zoe)+bfHA3buRvS4I5o+!)&Xo`QsO|@sFPhgPGLKeMpL6g{l;~eOwD#$YmVDmbGfx9 zVCb3$7ull80FinPT9HhuS!X^5S*CO5(-3KiN&{Op7Y=paVW~wr?N4ibEgqxhIcU07q3{H`JDYySKDD7x&<&B6O!>vq~J2tA;iX~Eq zXvN4a4u##cih2lj_({!CnMnW-oC=RJJg&u0kBYK|3>J^n;VZOR=Bo(hli6zMxzI68 z&meOZ zdJYPLYK*I8pE5&9|FR+)w;;~$q^BK)5mrSj7eqCX$}nZwoJ^0`Jr=pr6L@-rjg+3q zGon)v*_$Up*kb8=el-Z2BE7HD(-A`UQ@u<_Nbj$7SEQ6ls*h>0^Z{x+LNKJICo4Nq zNl#JLHf5^P6BS~cru0OGkb~5YmhE7rXDyU+h#G5C8k7$8l+vhlbjMatHz^y?)6F7==i&UdcS*&!Z zr*9@dWq7}osgr{`NW2ElJrt_D@_q-WqP#wVUjSMlBADO zcWVq?HhrAB*TIfg_iK#GIze@4jC49lJ*+YGxAe(sor9gCo^&{usZIxLQ@_<1&H7JM zPic(Su&1jHoCdKkeWu!!3^EVGVz%Pf@W4-cuo{ft<2*!y<`t?Ff zeuMBZ2C{-7Jh3X!HI!Df9EEGGYD^52g^>l2Z8Wk*KH~eEc))ct}+LG zZ(V1#gTBA6V+RNQ+q$*8YjpMq5cT(UYxZ%_&FdB(tI-oN^}}`5*E;A&>w+I?l+^fS zUDv}7`supP-{=+MMVMEqbsaBg{5HfRz^~Fj@uZrNg{M?~7G9|K&%%q; zWWoE?fcz5GAowiA)2dx?@`+N_{xFwEcu#e{;D;lBFST57YQ#ROaKSZNU&7&7P4J&? z5B&X9vEYQAzhL{g7O|TwT^bnN^%60`he$tl@ zs!O+%EOML+wY>;luI)nbMY{e3U!v>Zj=kkl-Rpif9N^2!gUkg$9EO71d;gZB?4O_; z_kM~87wopZpHTtu!}$huv)(VO!a|B(JrMg74=8A$-fy|c`#hjf3hXve9zs4-eF?!m zwcaW$Cxl8(gw-SZ!$8@)G^`$(fF~tki0Iuj3`XpZNxj0LCIL@yBfVYGyLYG(iNNB0 z0Eb&XCVe|hR~9eBbT#69l-4f{M=E$yLD&$z%b}pvm^2UyQt-4H2YCezrh?p}h9d_| z53JtXhk96~nvV+gut>;`;iwUX)xbMC+;L97#X!Lgd72U2-`DEXlyvPY&|pHf>Nha ziTgSV?dM9}KTMDqDq>QYa)cfPMQD@~8^f`dvpLi&J={d>-4fQ3laV9L3hV2M51qDm zYgj*G7xc=d;bgGOQmqEL&(Y9Y2V>H)q~Wo;wJ7Phu&`j9b_2ps3JZ&B9sHEAu&~C# zmxYC}lS{2l{1*U!PY1sc0*!!x`uIzeW8|szaZOHbma9&XHHyRva z@4Zt+*r}+K!|;hk;iuOVs-gnyK=AV_LOSz6e1aXa-dF3nA2pS`SKs?up8JveUaykY zz^hd%$SeV=w0!9ZU)0eFPo2Z{!Ke!$C49Mhhr;k>iYTa8_y-+Pu>7zKF7aXEl<;Z| z!HXeihkvXk7`GR~*XjtyaU^_Qhegyed_xyT@SFP+55aFuw(#2rS@@j>f=TAa=>%i= z3O|@d@J1|m^Fqu2;Sz!;K==wjI>FLEZYTIgq<^v;>JJ%{$HD{t!D!P*tB&WUeRkE= z!?@OGx9U+>0!N=cYIZ2>vj>U5YWJzrJZO(TtQVDVVmn=x1dLKLF8GFW{8OjeXN{d zv~aktn&5F*%;Pl#6aN#nL1rQl%cj5sKjF_u_eaHOJ1fW_m}!MH>N(}Tzo!Gn3ZV4< zKF2K-)cdAT4`mdZZVod+#dR#P_YGm@27pKF9Wvw&Xj6y!WRaF!ow{7dJ#4Jh3XYzC zhis{p2`w2jroNHTt1d#WNWifBG4PObHK|h_5p67j_*;)6q7FyJfor7k<)5 zX7&VdbpJ+p+UC)_n3)+sBn3_@TTH^Rf0iAgg?%3q%f6x&_$k6i>exa&OBNFUyGTE3 z3Bjmv+0qk&2#cbc7YEgM0}Q7sKq%XH)H>weKNyrK(-96msce!ijkYBY2sMIDS~eN} ze*!u1Q#LOXLfxEd1R1P&Gzh3vR>++LuNf1i!3;in3A6yGr#!s1TO1>2K(ojE1!I z70|sZ_7tua4%da6i$q<-^(EwDKEx*vxr7hUXtjEoDx}33A(yMdP2lL!H6UD9CaCx> z7nGW*GB*Rvaq#B=>W)@{&5obcAvMouz=uf?$(Mjn#pSOt>3|I6`*ks7A;h z9MuS^U<^rjM6F1S0 z4Rx2RkgW!NC?K-cf;_vBGloRhs31*PfAi6TnJzivBpn^haN$M-XACCQm7* zXUd^K)Ivt0huWLyxsaYvzFo0Te9-`Jci1eld9DQD7#r zU#T7%%2RLY^&y%m^>&yj>ZjLtguerLse}I+@T7xp3=>J1GoqPsWKaEt7rlgR3iY`d z&ClNDX(bMzsrO)7S+IOev@QRA?==4BW%hud^SVn{Em-fX!L=5T*O8x&#AkEvLEb%RtC%W zFS~=m;vLEI$-+znBxD{1GL7>!JEZ#PLo(8AJ3c}rq>R@Iq)cBv6eXmednj7YhoY2H z;hr>BM*8v&wOoI>U;`m7H6YU05&w)xRTPX2qJ;pG%}cdr>%!C@bbNjsnYwrdNXRQ; zJyn^ISHpHfeur#-3_JQ@)n7s6wUEbG?7gYiL%v@_*c;))a2Sg^Q=!mNFbD{YF+kvd zfGC0$n=Fy~yH<>1$YxfIkbm%yLdb`1sQHLP4W)d{p@xu8_=*!DpN9Gx5+R?3&JldT zN3fKl_z0emkdNRAi6XsCi(_9Z!6&tpl8h?JPK2cR*p`q2K98qXFO0OO&WA7zF9_6- zIY;aUNO5$U+AWDtI;u{LEQBu-ICOU)^bkywm3kT$cF`LExsBZ(rtZ=Dmte*2W&Qgha$nf)cu>9LLG`@SPCc*ljz{+2;|v3f zCHV3yxAPW@Dc=gyP*{J-}T-;VSN<))(ya3x*go0 zEyrEa5bM^rE%@nVa3vMCicahy$~*$e zWRsGLohbcNAXJRjd7rKWxK`Vw5%vx%#^_c0bqMcLtlKS7z`=1l;4XmIEk>$>lpZ5U z%>osS7>!BrhG30?CoL)|sR-st&cR1PDa@0Up0QARF9r30kMZV$zPuuAM}fmtI5I4# zw4-GK{LtZuZ(-5^C@X{~l|@yq0@o4x*E|Ri43lPv&YwuY*S!qWI}G zEpsd26?ek}KLbW4_Q(tvl*o*D3@8HzCxVd~cv3IhfRrJ;$MHTQ!_b%P;yBb7g_4;} zFaZie!I@%!>M~f@Oc@dhLKQN@0PTxq7FO+G`)SpV&aAd-Cude$wKKR%W)2F$%4ZHo zXem6#k-HQQ)Xji38@Lx+G%;{*WA}meObiF=!)xr@1NQ?3GAJc;JIW(7-H*^YNTbKE z5M6~RJ=P)1`Qt{LfJHSi8Tr{$dc&;^kg|asLq)|V|vg?RST3s zyYzrqW`)#b>Mh@UrIzpgQsB$XM@fs|QFbgm@KZg^77I4Qw9I+PwHzK)UUl`EX_B)B zDAi}Bu{@KzCbQP^MOrW7OQ2rRR{8@ozd+4=`)T;C1tg>|3~zvDRge{&V7kIaQ4<+K z?-LjkTzGHdnW1p~6Vwy3gfj1=Va&@Qk{xhgVpvKUvEhQMmz6FO06ey&Vygb2uz3Pf zEc`fyXD^xykR<3%3WT4g&cmu{ITI2rXF{TVpvak!Fx9BqD}iFP{Jjz=U&9jpqf=J1+7#9B zKx7;IV1(z2y6C|V-UO1U=)n(ST{ZX+a&!mRAt`ek(SPWe)d8Un($+K;IOrB%oW3nAzMuA_Kfd9#_*4Ixis|Vm~_3cyY;Yp&t zg%rNx@dm=nb#c=`r{qOJVDn#E-!XLta;&I_*U0PP%L-VjGm(IAI0CMKAIu2gLke6~ zUk^Jb2vWza(&I}ysmJYCP&6NF5PU#l)I&&{T)0CbsblyqV7}y3EgvIT@*ogajSv_F zOqe{1R4PE-mufc3a&%!(odzO}w}r`tR4I%x$wh^lZ70m~6*x^yE+!Eq{cxwGBOu07 zA?3;0#Bo06nBx>Ox6tOCm$p3fGePx5w(tg9IBWQap56* z7{47-=YkR;hKwr_A9um=NTpygWCD&l8r%ydXmBDbr7JaTPo)bd6#+9U0*pOK(^nG))T0SqN*o{0)O7xn64^>lTzJG>9k(UpQ>)08&F;PV_)3_j18V(@vkH=l1z zG1vvEH`k-Iq4$!}K>>t+v>*5Vq4#0~GZjHH#?bpQ$_5$q{rxe=uyHz;3>#-kA2!b9 z95&u4GHkpNGHfqn=V22qb??g{#8N54CK&4vtN#WD-h-*EGa@eR3|rV4wy-m8VP`s2 z1Se^^U$dp<2XZZkl|!gVz|n2j5^@ z%LS>mNXYO5==5EyGyDJ}WcUF_hv5gJmywdg4>T@6e6sQL;RhT051)peo{TemsxgkH zYORMq;b=Yl30vS3M(g3fv}L=XRpUup_OERz1nN?@Z*WT4zQL5TeS;}w`$l7%ERbwN zzBqh0Hp^~HAp~gy?0yP>x_)(7a*#P52uU0`GFbIP(6L7JR9Zj<3#ho$oPYy?rtWDBrm0-uJ&wUf-eU|l z@*ZQbk+uhCfmV(COtXx9z?MRwE@jkiPAQ{yGo_5$&6F}~chf9cplz0sqqJ2=j`{#> z1@(g8BikXE3}2a#fRKEn9w4kQb@GuF+{s5)8~{9;y#lqoJ0uoQrq-zMup z#;j))MQ`3J~`pTSS)27X86{at`?64#)I z0ObJK2L8^!rh$inQf>pQyc#(8_q3R4DARPh#b!&3p-IzN186zzSJ-rOR5Lc*T!pPR zS7DREXXZy>Py7u2m2QJVXe;uWJ^~CBV0!_^0x&9Dw1S1<!wr90_aD>W#)7f7spCBcohnxk+){haJJ+cTjAp^`XSgmG zNnKV6uv&m0=sYvO0W%u>4DQs;x*Bj&+jb)#{!eJTnMn?YBOlS~lmbrn9|izbc|3DK4O%wv2(Kzt1#$fi2n5i! zMau|UpTkhxpVM~%0;TVTDf3!69pC`Q^+0`AHb*rr0qR_J3Z~6I*WpMYhf>frRRk13gLhc0u0qX#mqvkzBUrk-`HT%!-kPiy3nv@9VsOfrc zF*^<8xO`wH6sU|UYZU^XKQC-oLx5+2nzu8twoKq0s<+yCZs`n-9j4|gbKQDR989y)OEG#U!^2uNo+;M6Nmj%ILddiL(E>g{+ zC=^eMHHMjED97etRUza^uDn~VDuhgiGcHqQ;7p0tCLBJLd;Y~1r&xV~I@@jxF z3;AGpcnaTm(L03UIVsw#(p={_xzC~8nyYGhh!bh*!T}&y2Fa?LK?y8tXc7f$u5f75 zYBDs5rRyEP@ad$h@Y4?4(@CrFGn7TE^$f|?%0EYR4ga3_HT*oCZFPsAO=A6MmoMy* z(wqKamm{Q$GKzBbS=Ov~>{0Jnb04y%R&F1%rY?9tGA3KY-K`B(WUUcKwwfVr2k6|1 z=uucPYgpR|-hTngFl^`c@Vk7Wh<=yxM!w`R3nFm%J-#Ax3L@Xc?4ix0M@Ag?=UIz0z3zxcJ<-Y^;HO9ox|TjUSqRY6^+4RSBUP!y|If<3;85$ zshor@rIWDW2o!`L{5wf{2&lSUx7f$p9p|-l7|EMlIJAD5viJ%SSvtBZgP)0@odD*>3R zZh+@ex54A+kJ(pHFisxBLinwh7LgMEEh)J{l_0>}$K=SIr2;xvoC@6w2cOY}V>!X> zzBobV4;}(mT^2=iRKp-3XHBB|V%o9@rdSPS5c66k55_B=OObW-YzhWTvoi=YAvFev z`IB)16Ryla;(W=j>Dd&XIJo?#I1mE#a^MdM4l-+iGl}QErsGwbGHVJ$?9#_6@^rvZ?Cklbe)`>j zn&PnE9M!TE$Yi8t0(_Mi_d>PPOF}%V*ZKj1l_34nOGDh|)Em;#R5}3H8_LmCQ`2ZF z?$}ZNw*=yr>%Lf0bP(MMI38jA>;cl*g0mEE=$SC0X4#WUfUyWS4JEp`pEnzyP3E-x zTaRP;CZwr_3e9o?RYA=q#ckp|g?p(MpHCIB_yUC+q!wSSzW0fXpQvz)l%PR1kX$Tm3I-7CedHT6HL7X=Sn#yMmFkGO(_>pfJHRwfGHm ziNoU8d-;Dz)iYHXkyVAYx(Y2r7XTSP>S12&)dGRS(VhYvAV8x4^8g^9J`#X=pO8Om zF}Ns;4(>ZATv=EQX$#=HFMLDykb)4|5BjfqT2&w$mNz%}VhgiN*q7p#uvERt6S)q} z0A$qxJ9>0EtnMd(mC04$0VWpJ7noS|rWcFeq%LgZ$D3X}dee(9 z-ScP1qYWN^JZ}5cM{c}%+lx2vc=6`X9=_3wKY#JkH+db{$KNGotupW?6-+@b{tr4j zvG|7y&!H^-nU@}fcwS`FKUR29W${ndEm`sKZxj!0`UeV6vMl~r&mQl2`1_>4j;C)? z!+CLVK#0diR$x_#=SDii%n&2L?a4F4f#jN5n^8pBa!-b6&ONz~qfs44BXypvm=w);jr6E=U|kg znB*jK961LAphIp-tQ>$LuQ9puVZ9Bcw|tf%AK41E#?UDHIlcs#?_KC^uQlR!j1xb% zu=!$w$_5-`U`7qkvuFdv29dKuJdbp7d|Tx6@NE9GsUKPXbHeMv(~gT)c4BdXIw#ET zC+CGI-@5s^q>shF>fz^y*w2rag%rw!Nf-T*m)YGM_nTo7eDZVM_PP)@Xcu^Hdn4v+ zSPQ-x=e^VQu50t>`R?B!?;O>*B^SPh3dmYF^nzL#Po5s*$^EgKw}k^iv#AgU*rDOa z_<&BItX4O!6r6~OYJ88~$HNz7gy)1F?E@v2>_rKhKCuT*67}++DnU0!_4Jz&PH9LX z8>cil7fT!HVkyb0Y9_jdn^HJ0=iGmz>(89~Z^?~EK}zO5cqZ{Dx3sp0^uVD>^Qc2e zLpvlEryxmt?;TEp1}*LgQ6Au38oyKU z4IaM9!y%NzN8L%i0rIy)k0cyt*?=$C_+8W+0be0FzJm=o{LB&Z-$nHUe2w6&&rMl) z(aN=I73}!yzjg_^aISv>N(j`?$%MAU-4mjtSo}U(Y-#_vH^dteEmN_{Fz*9l=_~|h z0)c?V0vr!O%T>a+PmeN6z6S_LJqC~2XL1teUI_oIW~TK1%SD)Q^fOK}tZjp;St)3A zdlBMyVJ~v<|6YUuVFG94)O&4rf za(8T60S472bhZpqlLsh?dPf z@~Y=~h=n&&aBbntG8do-{2Zp@z(tk{%NW?jf`yIY+X{*!Jvd1h7zA$vpl0F(AA6gubR{s^QA&Y_ujDtz{G!ZO4Tx>lo!(Y6qf$ zdR=Cz>jdXnYNy~-Av0@!U1rH$l1^1D!qv8&rM^zHRBOGAo%X-wP5a;Sru}bu)Bd-p zK)Vd+o!QbRf@ZbC2n&1~j|DE7x-E5HE^UXMVZ8T;~F4+Oy9X@KOsF$-jc$mG$>wsC8dtpBmFM60;fwUi*AH@-AcOmtDD9$-%p+f(j zIfheZtBKwZMa$5#uMPlb6Vw5NdQdb_i)p&HkA*)M9CWd~iGKv<3o>KChmOb0__-L4 zvw3{hfk%yxMumMdH6vdez1oh;^}j!hc|e5qlY(n`sBi!z4B+%blmDc z)002l!&@l7p1#kB(51Xfc(>52ULNs&Ps#%k?#|j$?}@UnINclJ?ye_9C9?e>OrQ{t zDM?Hou^@rF<+ivY4=?oaVh=AN9Q|jB+|gFIMEzS{ya;LFRp&*6s0+Ud1Ona_;1d8S z&h&xqsFl^m+ckl=BRxeIc?J9UV$TGJCGb@@TQSYA3(&A%!o&n#>V(f>_Eks+%z8nR z?;^JnKRozian_|NljyzLcs538lL!}r;a)Rd|67I^^_*8WzZjMVtD+QyHw@i^wuQyy zN6pVsP@`^AwweWBU(F#U4;K8J1v#W3OE>Fgsk^KojwO#a%9et5$x#s2Cf#m7 z98!|GSyI5_OeUJp8DYof-2(8JB-|q77oAsx{`grUk<|z3VjuQ^MQX0o z5kxtVc|L1Nor13Ne@^QM?#a@1>Y%f5*@p+ zf)q`$QrHFQzA?PY?OG_g@=Z7b1rrvW6`T{)4IBbi*m9=n^fCp?h8#tlV<=iUpFF_k zXz1w!hJcsW>AiX_eVNv0D0;SOqHfj5)=2VrZsQk~RSU_3zVA3^w>)U)?#<3@+zJj) z_nNv+PWQag?1l8I{yFgHinENv1v#xfi?ZwDbOS(7iTCcT)&M_S@Ab{i)Jefl!Qg(| zkz#mT9NzKsvTf4t*<||&F#XA6+Mt;nL+0h^z_cMHKh%4P{-IvlWljHz4wLmRDe4}?E|^Es%MkL zvLCUu$?pWWIYQbdg9ebc zS0uCFzw-4R>dDU}JN9t(>6P3u>)QIWDSUs6!iDOa#FH5fmnZFs&2W;b=`{|l>#pfL zCLe%$%zo%fY#aRv;Y&5A_JVh!y3}tVftExsAV=0KD0t&oJ&>&6U;gR-&dM{%s@ZQi zg0cP8L&@PZdcOw=@D6C*XZm|W$yF%-aD4J-G<>TMlKOXwj)R2x>VM$bGLd|yYb4}|Za>T3M`yoNDIo_(Q{n8L(s6~6tx0?2d2>xkuMhXuDGs;*Z> zz;fsRXYXC$<0`KE@w@lxUaw?Z$WLryfiX757)zGS8=0V&v1H2@dVp*m%WAbNEne-e z_aV#1U}Gqd=7E8c-wYYxSsv?K=m{A_~M23cjmC$YrS-x9W>Z==3Qt1owrQcwfOyW zJ@v>k+ycVKxZXb7Q|5$l)47}#1IEKA$Q4#`k{92J8r0=#%AkILYIiYUu_O1#WMW%06*yJmnEfAXx#W^;Eq`Dcf{ zOX?+I@`yP3OT*qJ^*LehlDeK*;FLet7eDVb@$-H87nF_5CG~}2?~-~ov&2EZ))&9T z7oQjQE{O%d9r!wyO((v}M@((lyCgo#SKmrs`DMQNg0Odqyv9f0a$ot2eff*S-X*gi ze@)oCB(4tAl36Tk=ZBpo@e0Nx(l=Gpve~1gdAa+OFfDgqJ=Jm-<3I~N5MGLM&uOkZ z7fRQ?kB7bMUK%c;w})3@2_RR!nrGGPSxqjc!WULA8^EtiGMlSu^H6ivm}{z6vQCh?3q8?GIzII^?w*+=W(Aq36TSYL)D2 zd$syPm{zOBc@tV4ZL^$pj{JEXg|yHMY$18gB3`@R6h8IZ_3H2`*RGze;X&hdT$<`l z((m@2gHSiwi`x}>@#Z=ufrXm9to|9^RK^8n@1o^v)HzDwIaPuDm&6)5LhYoFXJPEE z`oa0USY4vdl!%3~x6CW^JY^1w1+BNtH|jiPo-0@82`{eFdgO5~*UA-*|Ckr*)smXA zoPNf~(O^k7pLqHHkd4o~VCKv4{mW|b4W(QaV4W<|TZUv3a3n(1 z>8!nf2ycu$8v9t4cdh&wzo6DxYd^;4@!WCm+Pf6qU!Pig3lESePit=#S8Hz(e-EDz zM83St%8tv+tn9das{K7xYVEDy<$m*1B7THltV`=}6<6zT6_@+X&#Abi=S5Gvn#P24 z4Z)Er@2>Ovn2XM;@K36|tH39G`R`|{obpGjKGv*OVSmbH-%R5!^xi63sylA4r>jn> zI$Q^;T^D7z?f~=%3=XG=VQbX=IrQ8n!g&5sae2QuIe{3p13H*z$qRcwOd4=VQyIe07TyYlxw-OyI?xL%tMeuHS z5R4M32kh4-u5bkp+HWyjaWAb3`NYYJLsWxk`pP>zZ*9H9_14xqoC}^;?sC16)g4Z` z-r9;Vs^vDV9Cy97HRIgxxzZiZayq}yVdb46*%Kq4o)~fU#E5gm=KQ#;C%j?j)ru=W zC63yx{FKebmHhff=GV$+s9$A}gr7OH@-y~pCRhHwlll+N+gCq(4o)P9vY%!y_E7h% z{G}n0{nA19OR7L%_?3g~SFThFiuYKo47->#{jhq&=5CkNtln*tuzI&GDywtOt1WZ3 zsI1Q0^09itd97yAZn{Vn_lvJS>Be%>!E(}W-RhU^)_H;s?r%B>UvaQ-P++X;eF}lYkM)$bH=#Wc{ykTcVt~%(VXVpQQo>d3!rmnij zZr`eVY~HRqWH)uy?>R3@bp`LE8bqsCz3#^Hx`X9)yVa|H55dOsG?J5om zENkB9!m{RlHkLK-v$3ps!se|f=JA*@x6T;j5PX;1g0CG+f1HSh+V` zv*bre7vYvAgjbA!h9QpNc^2}s*8L2HmeJ5U*w`yxk8$TG@fMOHt)3E(Qh29$UH8)z zzNL=Sze?fTmT>qN6pmcP;qc!gJSOT{K;b(!bNaayPW5t_Vben#X4uS_w&?y(5;_z* zukNh~@(Diit`BP6oA~73qQ6juHq<>yg^2g!Z6S+3tFkVy`#fcl4i@kXdI8m4*VtB1 zzcf2Ec8CUYcvDz2ZoM4t7TUHkT*O@H(6!D%an%IXLZ5}$2$Po116ABv*HUum0iIYL zv*rPwu-$Q@s;KTsdP~*6{L<}M{C(g2E#lmjp|`RHGx&l3O^AT%?NxPbk$oHq9Qd>f z{4)ZBx5{!CH5%e|A-h!e9u>G(1s+0R@LNxbiqC()UNbnPBBQ#1{(U42QGw$K?D!S{ z)Q1|rGAAz$tWm{U5h#7*<@@o*%ltuIzVUKUo)kIqH=?eUd*nMO{|pJ-q))2A2^IJf z0)x%?qR+~zkT`U7waV^QftwLvdJ`(JTLt#3zym7q2m+|~k2~lG)$Xm}-Iq%MSl*vE z7di5n$l$k+69QO0AJ%Jbx>rUneyiZ|M-XS4zlgvs^)i==XYjZBI~Hd~RjHH;>_NbJ zSKfWzcjXawvHn+VUj2Q+G@HvGMe{3Tcc+3p6TX+;7WZE`26n5sE>1lOIoR+tF#??X zfG*x`*n$M6db0`)sKD(AI3j$X6yd~E5+J7ncdGzNH`n!tD)3$eh6rDYyz}uX$U8O= zeuQCgbLiJ<7?JSb99o3$+Yjnn@uLkYp8x+W+MeT3w1@8zaokDmdhA=1?+6|2g#M+^ z`F|lf-iHL{(yb~mrUH2cZu)nyojz;+RLJx9RDb+L1$0$@t_mzcfce~jz%6@a4OGkf z@VDw`#OC{vdh0e^LcLfk5&EzL>XPMu7LcIQAci zkyGF{`k@a!4e>A>D>qc_$8#gdxkaQ?&VW8aWh34cf`DVebtu9Eq^hIGP|8;4LZHgt zJyls3YE`xznRkOi(yRP&c`iQh^IUx1=ea1&_j)Eym;Y>)^d!h@xSwTDh~v3Px90yBpHJY6zWguwY>Iz&`2@b~@(DcW^9lS%0H1)(@@e`63dD5%gX&=j zgkmeCDU0w&A$2r#@!~z#y9bZ)iw(tF+4N7D!jpi21NkXFW-i~`Hm-{j_2c5Li{jym zoP?{-@%erEK*hBjk>y21ESB{v4fp#OuQVKFR~inPSFzF0W}1GD>&1jE3@je~(EIGx z_PJ>8bG5eL^%}>1*J~UH`PGfQjMwir#qXpkt9`_-_7PXLkGQIR)K%@Hf{7cMyGv%# z;y^NT$t-G{WXRRLR+bF8Iz&0#y84#Tc`bIS#r(QRS!yx!P?TE2=j&x%&$*vgc`mg3 zbAYd#z_%HJn|u#ZLZ5RDka81+>JOQ=!Hn?1b6pm4{e2uCJo%4Q5@p{ikDY%X34{Nv zQYU2U3zT|HrRH>~D8fdhX>*}G-7{&%LxzEfpCpaPE~z?$%J1f2KkeaO6M@Z&f! zMIZeyCG@jM;L2ZAfs+UfMpU`~CCe36_B|@_b_5v9A0cqZ`|+hdg9~LuzehqhAc3)5 zjX-h}z8JC(0nf|sbRw;lUUp|!k&(QiDoz1uDM%1+zdZ0mrm(%duMb4Y!T$kg=u=-X z#r5H{Q2mbC)Y3Ij{5UVSPH!(lYSwr!2#- z6_hU&>=%Fpij5I^L7+Xc)?nvLE|kA+c_+%R^NTv{p&t6W*H06#FD{Sk+4=Ig-oIONOW>#~PZK#$RH2vnWhAIe z9@TrvlG_1KiLx(o+eQg5eL^Rh7f$?D%X=2?hx|elC;v6edlv3>%X=2?zZt(%{wKcp zPfrv7A7B12I4;k={o3-LebZ)9N6E8-<}B}7K}%%%&I*Qor9xcFq4)ci_w3*|E$UamxGQzs<7by32mHRoYml7w-dpV`ol%DM zoW@;FUALz?yhGg{M14skKeV@c!L1ryA+$5pM;8cT9DA=1@_;NNkh`iEuy~X$KK9)& zQQatZZ}l<{4GSsph3dKN9dRiCS~bo0PW-FYWGnazeT$pqPn}oeo$BV-&^<#w&~s`? ztepB!7hhWAz23-Q{!KL`#zMV|JhW?vdJKkIPB+qpcGfJ}8M=iYhJgj?eH4ZX6crre z7WgQByN_aj{2fez)1tTeC>G@f0ulBhc&z62vx!h&@{`QIlH})o=w7JtcG&-|p$>Da zRgX4i@0CX>$}>TIL;`)t!?m9j=WQZRDe~eDaajwUqLSDDu&ystZUd?NX_UKkTIHru z)hUbM8lDq;Eel`t15Nuic}a`EnWe|0N>jvTK|0;d^{U#%O*4LicW@b8wgn2*%|Nb_ZZ6A`l&ear ze(|@8%7|;N6n0lhmjv&C*Oy8P>|QQ-$Aqs<^kQP%Ipgrm#{uT0dWEx)9P}~nF`^rE z%mdm4uFsj$>1aOuoG_Y`!S79mkF1{!Y zfRT-{@8yKbYZiH~lT{ui0(^9C6640G`>Q3W;*=^!T#CigD2E(%jGtzgVFcsuzvg=h zL((@El_Y(;H0kvPC8d700DQI?;P?ST(ACn!vSxctENiyc#Ik04O{_4NcV>#}*)9{S zh9geq^4VS!>#W&c6KftLbIQ;6RldL%U+5!dkuSd37eCts^ z@2me@UwnnH{7PT^ve{n4;QZNM6Kv;f#{|28>)xd(m6~90or70h-*!3^?Bm=5A4mS)N3lQt4@`kG z7Cz&nSd$w&KX8SA=nDUcDFhv^rMu6@ zJU~{3YyKbL`IIk&n+ixyoN{V#>2-OHTxp7{etF}kuuo}*6LVCV5^R~CvIN_trzjzg zj8B2Uo$0nz)Wv|x0)3KiW0Xzv%!79m>q;BzN|DncktiYXxMLFL z2fJbf80J#A90=?dAzQ-sX98R)>UPQ}m}G%m9gODb8ONlrj29R^ z4R`g=4q;1s3}9DTkDcQJQ&+vp{t_HHU5g~!U2OyhkGYy>ODh{3rA!*)0>bQujq&rd zfzd^jtlzZ{v4eeMczeCL;?w5;59Ga-`|W!xrv{?)2zL8Qi!uKKmvPyAq6cp9)dSjK`wd@eFxMRKQ;;6*nN|9zW^@-9oF7l#IcX)b6>F2yp`9Qcoyx7}`auH?JeU_x& zg&Ad^ElqmYIVGizP?AgV0Qdwg2fRsm;=)C(V}ExovF-0$_pOkiYY^N%*K5*8=hAw?nVg5YJx)C4i;wu?aW**6XZVB?KI>!D7a#M*lfL*J zzW6R~tn~k;IO0$??u(~=@r*B?^~HDl;yGVD?~4~s6EFJm@0{yhEWMTUg;^7sTjt98 zula1Xud=P?Gu2*Z7WvJ-xwT%KySBEB&3$&Q*XBN5d~vPU=JuCgQcI#G8YJ={15B<+ zOEXbE`uF;X*vFMPy*lYbD$0urOT&(9`A}`6pDFKVCg3=Q@^FX#VD9wp$DhhRl$Y+f zCO)bB{3)KR>|Hvg)RiYwTpC*{c40@loImXGC{vF0_%zC~O?ldK$}`1YH%9525(fQV z7vb`ho}{XWuaFmxlhFia>Vg~+P82bJx}1b>Oc4)PXigTsGdZ#C_f05@7UqSEmXca* zc&^ZQ!?UO*a1pwK{xpcDQH1XDK20rDq=dU3a`R=2lsa-xQw#CsG(~(ZDwTPeV!OIv zyt8?0TdQ=4hRhpwcH@fm3F!l#CIrk!hTtpKgTfH?L1BosL1Adf1cf2%HYf}kxTP>+ zXu8>KGtF<;3OBN=DD2O-Veto}RyvV=(n%vtUcoO6^|IQ9@8K6J#wAas!Xgx;kOi#! z8hPF48V#kwBvU+Enze!}ML6$eNf&;lj#*)}!8-eavNtLTiaZBx|0%!k08_&2?W zxMlv}$6gm$>i?(8;BNR^B=9N8e?nmF1(p5Ts#(rW%_pkF3C%5kD9_i>P0hPj;!Az# z%o^R)T=s_M6rUv2roNx~R&hkK%>B-vuQKoe2O)Bf>ONa#{AN$+x(~0ylj=RXT6%u> z8Js`8kr*-EgS<%vP}zxIbsTqvs%E<9a(Ac`y+mv?{^)Qp8b}rG4BbT4+#EX1@nDO< z=yW|@265Ue~N@b^G5WBUxBN@k0SS5MP z4K~0%SD(0aHy^8|5>SvOukVBAq{Fp!U%wb%Kihz>WFx*l^HV&eMcB32EG;}zPoW?F zOw+<~Z3~5?KSwyB-@cTjM9Wibbon_PIY5!I>qO)ciX^Z5G&GSccE@$|b!@QW^L5Hg z-L9hFq3HNaD*8)`W?uSel_*^O3q*G>|0@~2fugx9RrJ!c5iMN#DVaM;(c*O~N(;X5 zp3R=<iv3q8?27#$G{+Tt6*rJLwfr!&P{i7Bi=XvcXo-mZE5%+94Y^AG zC^WQGGw5PVet^2p6%J|qdOel?L2USmFn{YB&z~xnxGcgAH=!}tnVRu_G|rnuM?u4)|>wO(m$5wN%Z65ZG%Yo!5W z^~#Dk(yyCbD@)Lgx{!5_?9k_M4i~#cuj2@lb-O;_p(Lg+;YgD3#P#Lc(%o`;v06h* zi%6x9b*&(4iFK(Ui(7HIB#ZG~DUowdiw=JOdKtL$DM-@Zr?0@{L-fv^x-|{xgTKcq zLay}}b@fOz$hKlh()cj5$ej6};lKF zV1@%T9GKz23FV1@%T9GKz23y?KLOgX*-qd8P6tD@!ay}_01a^);FwQevt|_Akf^@yuN9TwtU^XBvr9| zUDxu)vCMe9F`6ISlT0TYCkSdoVKoGd}Jg$vMUmeHx3t*sgcH!Tyi3w%TI}=1S~Ls2Tx-xGd`Y4H^#D4 zH*6}D6~Ru0y|JNz{>O5AvxQ7!CRT`N(uK*uY;e(ZrZqC9(h1_0JAQVW(0`}mU z)li0#={JLV)kZ&kFbAhlz$5XA=>rqa3cwtkG(WTVl_XXt>?Q&Z3wi$=#25W?xVzg$Bq zsHQAU$>>A?VfIlH47fc0k?a}Z4+LBm{~4QZ!7K36F zqZLjc0YL?B(vrF8p1?XQC`@Tf11&<`tPTWN7B9Sj@J~!%$@s7b1uvyxA`rjb=z~F) z!HgwTfMu-*buiE=a0g{x2?aqb@Y13Dp6SV5!TY}=;3@G-MMs&y%DuUq9c_rm;oQWjwz{u%;CS>0}0eXpMVfql~;B;`mi0B!_E~o zykgzyqOhXs1dSw%7`jYOpmAR@U|HVe6R}7L)lOjeQ&GW7<%;`7k`k~IFFn#> zik+_5u2XE7mMlz_5LXIco{CsSQ@o-f7<73Gg86g&TnGj|H3iMVWkNB5NC*I4o`&Fl zJwGRc*HE64U_N#~6~Um(Q;;u2V-?t)sy_mP3mSOd4u-b^5N~@&#-okFMv&rma7d?> zfDJqu1cfPWXRvYVZf7va@|Xh*Pe1AapryFSl6iRAaXKNmcA+k=0KAljA)TLW@;0!B+@ghK5`PT9mN|0W5>J zfP-s=WCadfMjjZt3ExW~|NP+)6j zpi|%u$h#5(0>V#4MI}4BB>Tkw<}=vQr8?qG>({TJzIJi5ARuUI>$!q}JS-s~Abc4r z(iKiE@gRU@@dl*b)An>UAoSD}G@>Puk$9p)O9aqNN(I%FqbXjf&^(7-6$Eq&+yS}j z?Gq3X5WYMWiTD}tAP{gl{FSbc;^`oe;LxR9NQ^hF zuW)r75OfOMXV3*qKtT9XDn=(NWPc#QvUmg1?iN2F4+vdK!5AKUt8nB81f2qRz!tdM z&jbX7FGEE-zo9a7WGoP5Ddyy*>njwyV36f82V|U^@q|7gco`ZhI{r=;P=`E=aK_zoW>uBpPN3%F{8nQ{X-m-V*@<;Y+DVC3hE- zBgsrUp>Zy%)tL6*lHP+;6LN9Y5Bm!YAUs^GZ-61Q|9$WqL~&(63T9~^pW3IZ~*92o(t zn2MH2yuvXc*bxZ4l!k1j&VfLHW$^~&pSufyJRo!_1-s)xuA*>b4+dF^IoR1PH|AiF zrI>N9va%^R5MUX+nM9#tdn+FlSm3AK#%wYh$I~?d7Cn_gxiI3Xt?9Fvu?2!~FcqT1 zsela&2;$&MWygaxDiDB!CmIVdF%k0u0SG+q@l=RbsCxqeI_(?H2QYc5eSrYVv~R4K z9*O5FI1^5@eIYRP)D#3%*Pc$2WCX0D3@yPHPaYbAflh%tU<*nJ2nb(F1wF4932L^x z$*8D;GIWe(@&VMOhk{_B0yhn%iC};gfRt%xGFPZ{l{*m-whZ?1N%VDv4(N%Xz+U`# zB9~9IM253t0Uqm8JzXLA6f}%xE9nHAhG5{OH1NrWNNjwhl2txYQBeh@bfgOv+)hLI z0|A!e4SvqoEe64%y%fj?*@k1|l^hAE47w}@bVE?&j@6A=%^Pz&e%Tr&`V`_@0fq8sylKYoCBF%d%vhQH?%I)g3u!AjFkdaT;2JU%Y6u%TH7As=T!2;-m3N ztP8KI;NW{DumZan4!|7v)(OTL2+G^u2^gh~$x61CgF}|b9B^Yq^}IqK5WEZxf%eBe z=mSA|F<0U-P`E3BEr)$1H5}l{MKAVXuw}8s)iM1E!-qW(>{Qs5eI|@d<(fDXn$EPw zsVJ?yo4}|5z*FKcZCJo{dujhQpK+aKsm<@HxC4WLmcyONjs!RY;pIp$*mBr|@3nX- z2o7JCii+8P#@w&?jZbgPYKQKZAC9I+aIU2S_ibg+q6f%&7#%kIH6I&bSSf(-c*I)YarXo2WYe})KD*si}Zoe6S2l?G!l2nW+>E}9Mal7oOC4zBD-aXi48 zJ8D)y5C_+Akay4!ra%A=o-8i)3HpYmpfC=$L_pbV3?FIpG;mP9dm;qmTHyRMe!4^*hyoW0gfP-fwnTLQ37YmtyzTJud z9lWu`Xaeu+4Kz>VX10Jp4!&V*AJPSQ!AD?akPc>?EDZjT!|8z3dx}#{FtO+)PQGzG zl^Jc!XNoy`7#!=9d|_ncXu8=z0}T6w@4brQxo&L~mESU0)KH3MOO8!aBRGtIp-?P<%U%w~oigVJoFJ0@)}i z8^;Tn@t{mT8C#dlWyUiFN{i-VV;l3k_NJn{;_IRllb1EYr9t!-(?z`Z*+w7|%hW(+ zH+uGSd@u9xfZISJfzQIV_VAob84T_}x)}G$2ovppSPI~Y5 zty?3VZEb^*?VC1j-QJ4AndRJ<>oU1wV`lh{#ht@W%cdd$uAr7Eh)##r!(-?z;FSW|lnlp;jSbvFQP7v9V}Qi$q%c z`dW8H`nz^^Mh15Dc19vv5%@>bxHk~}qV)}QM*6z8T_5S+v8_GQGvG_;_b2oWMEVB$ zeWj4N8HqWp?&z7SNPce`cUbPt#x?HBZEaoK2O@)8BmM3Dk*3SaByNaYA(N@=FS~wQ zpD0AJtplA-q^EUA<8Gptei!1gF_G2YI?#Fj_P!mFR$si$7q{VQOpRu8du9Iip5Dmj zjy}Pnjvd=td%D`oW%UoV4wTPvYQ_dgWNakoWGDro!S%GKF}H&=<1P7l!<*qk(;`< zfvW4fw#jyi(lVoSTZbokV5;&m!(YC=H`1|n3KULW87N3edBOlC^ZZc6`PgtI8_z-T z#+mJrVh z{`OWyohxH-YwJydELURB_70>EbZu9??_jWL!wEHh2?vx_1QzC4W<=}ifL`tx6u*7^ zYZu4c7?Xu$Ja6-UQx}FVbW2C)5OH){M{A!HDtAtAUu*m3$oi&cL1SswhN&`I+vE^+ z!))XFNmtjtq>X_4InA0zJ;gw-dzrvL+!#8e<*o>OM#o~A}GcQWr*fR(oZEuhC z_e%wBr#KKjMV^SocvhpMH`3qPPGZY**?JqPJJn&0JJn%;JJo5XJJo5VJJo5TJJlu_ zvLMYdp7}c4d;7W~T{lEJS_fJ+5o_xj0R1-%c5Z9$lu3O9k#@AEZ~Inv!RtG>aWulZ zWfNu$Q9)m4&vt00p3a^~YkPZVf4@xc=-i4)zNfRbe-K4Fw+(p9_jUGns-(^vkqzC} z(S=Eq#=oe!r~i5}`B8h~v1~3G8PAW3In1^ZK>1*2WK-8rXNO|}h{PLP`?|=0bBuu9 z#dt9u8IF%dCz6?*M!d=7NIBT{hqO?NutTnl6g2hABY~ua3ddU~WB83=DWQ!=^SdIk zVlT3~T-D^qkN``E;F~U&6>)$8Xa}I5kpoCn5mTX@stk(;r)G+Hpg5O+C}6`do$=^o zjL6HR6Uk96F~)?BWJh+fyi2M!G)t;DkZy0+($p^TJ($wct?5E%YJ8w?QcHJiZ5_^U z%Efy#Xilq^hMM-oJGQn%)5dcsvb(i!Q~Ne5;!i3RlI_D9*>{l$z8S6hWwJpi%0yyV zXbj`R|41UOF-$L37~>jrP*0IaX#?-}Bu5Hkgv5ztbI}-DiZ*NMUJAD(*fj#`Io4ks zj`ia`0x$(-%FcK$)1JxYsGLmd!`cp>jzWLDpi(j!#CALNP!szLQFN}Tm*U$KiM$Q5 ziFGdlU=Ga{`uC2bk5bXR3~^#_ZWxR%j`J_Q;#Jm=a4O^GbfP0YmCH7f`I+VtiA-)h zS|H{?LDM>FuRuG1O0|4(I3r0bj)MX1(OfPW&*imrUpy;JR<1-z3YfboQRq+ZixX>A zkfccw(Xq9!4d8?PGY}n_h(N=Pq_lzNXatKgcPu*Tj)}aYEGhC-40*+@r~(-jjBcRX z#BX#`8))*>PBEu;Cy(lL@>ERLE;G3HOJ(i&MeTyqX?oUPgo(+?(Jr1nIn$NEoFDGW z6b4iMF>qoynJM75{zx7XVh2`g)SrU65NI+0$BRN!6eH+zI1DvhKnrB;z1m1FlkMeq zTjU3`T0WQW6lB<;_N>;Q%Xh?6(Y+8PEnCF-yB=s9SjKqhFqy2?U zR3pkQiDo}%hA4x!X3qIDn2$~*8$VjiSSn|Xe(S2GP930N1xCmY= z7tc+^M?^mnC29-^O=Q;&R5^4XsR+s$pw%4(+A-+(7xw7pksMc=+5-h%OFCw#gfWkN)wjG<(JAiodYmW;v*57*+rO5XO;G_Ub@d#@bjV(G*4HB&+u)45E7OLeg% zX_;6onrDAkmoyHjIg{F6Et%)BN(w=B8n{F*PvRHeBq=v=tNWg6L3Z% zp6!5FRg0mie9_H%wsLz~`?kOWA1)?@dZj=zGZAIcp#TIS7mwz~Bjl5Hfn0v6Mk%Cp zQ6Le+l#m|AXdKOJWZr5SXn<4{F$~_3cs`a(X30cOB;%=(e3K^L#3W4c6f8*6x2X;C z7t%-ZLJ@8-3MA8LQzV|x;zEka0RL1vd+%-H8 z@(hVipbGM^w9rpu#nE^+I*K8`Ps@`6;6;Y)1!w|n8ScxZVa}0Z#&QthU_6BpL}_Dj zyoU~sCJLj`*bInfn`3O1+l4lz$3&oJ_&6*{88oL}adv2#7rHm`-E_W|A5(h<*gMYME2e z67Uqd>6S$!d3ejgaIS;8QuZ+HOLAswBYR<|Vpu|CscC@H@@>Tg)W%lo8M59)6hm7D z(w(XJIM!-g5-)krcaa;xU489IPKPh{e@gH261tzNjby2m8Fy2=hdR_jIwZ>SwWXTl}qk`fdgU9 zZ`zDmx)g#F%j0M#i`%E)QH@NV0w&uxIaSU;xtu~q2#n}pIFlhQB)Ab8_F77fzAUEQ zb}3U@d@`HNL1U!EP{jO8Qz-q!wagx9Wv#fOnZ<@yE6^6A0A^nD^I>LyK#3e6g8`C* z8LX1DAxus#WSgJ~UD1K)D6}8UOIm2Aq%OcO+_n?s636QV$6;|6u+0I3fEvRoJQOJb zD>U&#%c|nAE0V(CFZN9W*I>2>%R?uERh*<2wgLGNz%$w~!^@*Jm}l&QPhv&R5}8k= zBamPCeyG`)^6+Bv90;Nmy!A>Ha;hT+FptRY5FzY^$j~U3{h+pexE-0;Wz11~oZ_6N z(Od{!65#`+OkRwZV(0{7BbzF`gy9gD>1_6k2<#9MaFLeBULDs*cm%b!%LE9?fM>kI zZNk9;lFFh6rawsFVgOJ^tlbf z15lW!N*zEogO93CEj;uyY8gfm%zIoX~l6(BO2X>CZeGtA79y&4QL^e~o?u!&$` zxMIA9VtLPNqcA_@Fzdto3TuvJ7(tk-DL5G>BV=RHFW$wMD`v45jID3l3d8bV8=$2Y zxq$PLTxAO%OiMOQ(k^dXbnHdbpQ#Ex$f9FJz3ClVTI zawsiw){)A>3oavc`h+^j6Sp@{q}IYjp^RrXeKCX35{b7FXhRaplC)|zHw`5`gg?beAk>=Hg<5BV)7vuQC<9nNgZp_7n?+o(>2+j>_@dOss!(_U( z#YZtI%1Ec0$fVvCMx+}RS(TBIVXY7ym0L%VjyB$I(R%#}ZpOeVFWBT}8M*|=@0$1I zb`cZUZWZgH{FwL^n1wydtC1p>(wIHKVoDT+h7)_-(GnQS$9xO zcLVxrycZr03_2APmI~D^oG0+CM)6`DCI6^{CQY_z#AE}qMLmFQ@9*NOvk`P>Q94`2 zSsJ;Q1zU`^vg8kygEx^Eqw&lhjJNSL@~}-FrG-8O5>)Vdpg)SUS@7fvm&yPMC02-8 z921HUWUw%c=HdUNpMJJ0DFj)iAM$>JEvTJLJ@%|~xHpA$$0$6b+-YJ*568MNjYQ!c z1|3Wg`ymQgfnf!nga0}Odqg_9&<1vGsb4Azfy))sJ*Yxiaun|B(8eWUXbu zoy%tj$e<&`3YEjNF5AhG)(NF`c)!u6j)`Kj<)lqYguD-&#<{dTN8%4p7SqJLZ4@Ns zgdd?2NW&l^``)zx!m@z30(iBR?rQ^AX_pBBTGzuX1Op0iD7H%)0#L@%9}_E(UyU53 zC@8m`hNU>+w~cfOulk1*kv;6Gg!aTZgg-$#tI=KkFelWs61a7em3x!ApCFq`Z z4i`X*0;M-DmiRCZ1l+KLHgCBU&DrgR~Om>8QP ztb54wLS{0jLpM3}A`~r%L#}a6aL`@K$wNUp9f{32HGD-qzC<~urSxEcV`}2f=4=7( zXKe(_JGpHVlS7raQVKi>u@W1OvlpKhWnzF84nijq{a5mB;nZ=_5i0Cw#tYWgj0x#h6@!c%z@~23?MNR?D zNh!CYBvla2W+B4ZZOIEvi8vOjSh&JuffGk49;%M1BBFWj5Y{C`M{Wb5KpwUMtQNLq zFv4JzBaIU1S1ze2oQvX}BoRU@Z4aUX^2yDS%LQ1?Y=^N8k)*v7$RYtVa*B}D5+Dtp z9G|P>MrcLabQdS>>@b~Dq6lUcv1`phSedFya`_x=Sx?>mA_9-VF-)5Rn^L?LPwRZB zH282i74sN$4s@f4(s(8*%yTA>ZU_hODdc5VacguBx1xV6nZTq8;@gr1v5i%PEiN)4 zI83eVDIOiz*de=|Y$usKKCERoLj__R6}pl5MUx?q=}0U_S`l(2<9MmPhCh)a6e8i~ zk?!;^+h1&>K!IYXn-6k|UV#;;;uv2b1{m2E1Fh`Bg?A&K-=J(2&MKzC4?1MZr!sgR zft=C2*wlQbIFvvE8dD+-1Cgyx?wedD15Pfk>&8J$5@b!_kHe87LgbJvf(}7)9#eMQiHJD0d^4@E9|BY!K0)phMP9I%Wu{g7|LqB=r@3Y>*IvIT6G4QW-9S9Y8YE00mMpda{{3*zT00Y$SOSY+xKk6ToD6x}Z2clc&_N z!U&&Puq&WEy8;m1gfWa`+(ZWlD4zq!6AnLKSHT${;a3G{aTaOPr0}5U(Rx?26uZbl zNBaT}-7?2b<#=X-oP3!P;g?LpNY7#sBTrh<3Yj@cV!;7MNPa+Uy3zyo6L7X9|(iAXjD7zdp`qa4>4jO)0oY#Z*1aN#eeP1#EMdm=Y6pTx3ra^EkHOz}0LN z%V;+$s>Rbj=mC!`lVJMkh0U6ER|0yen1^1Q?KHc(GRu-m1sqa6byJpyKy(221RPC=Kh6aVFfK>&Z!2$O@ z6*{RHTru`H%JBq~gm+KXubT`{S&*nUFFjSOMB15Tw|)6sK^ZR#phyeJ(TFsm$P{oR zpG*ehkSR2s|;Qr+0y zRhz*ohX~~vosoO+u-f8emrKe;LD?(@8iLDO>^6|+1v|U^Q;5n;w`B#<2 zW|QTvP3GED^;CIoQfUhCk?RH%laIp7M7jwgXqD;Wm0bjbp-i?5fjwh84R+NzKy*-5{F2KE%QjJnAdn#Hf!>{r2xbcenN zf-ur)Us;x z4`V$~`9c=$5_BSKM4el~Nl-M;VT)_UN1K55@~}Ta-pYQS2E6q#Z^Qy$8<*A-F*t#z zc+o_aqYQ0D27>_`ik8J*Mk{jL*i>L;jTw*@7i!A~J_G1-4>N>;BanDc=x{Msl1zsf z9sXLyzMQPrpGi9i?ku^^rNgmUG*hceAZRNcM5gf&AXa4sOeq=chC))(nF3A~DJQjD z9btP5X~Nnd#|Wk(t`VaqFKa?`B@!M~~6>rx1(p?3S>!w?Me2*L=?FX7NZHo}BT+lXvw zTBr$^R1(J~V7$QZq2VDiSVWl5;q+j~pxA}r80C~laLWnhsA zFRGA%1o^s27{uwq0*)lv3G6ZP?3E?++lJ{8L6}iJ4>U|_h;i`&rJBA!~mv7uzE(vh!i+TBZ$QC=pN3GVq1=+b5( zqlApAK~L{)&a#u+j^Y6;Y&Q`-U3dfwMWFHEj6+17E)gO~PtWkU#MHT)&!zBQ5#){s z1Ljly6{C^ZMIKd7qAlwP?Wj^8iIt$bBLTA-Q@AIS+eK%N#1VCZR^>g6R}w0U=QSG) zeF6f|COOGNMDg&iJX=qX0mDG04SHVMY;EhKeY5SDq41osFp|X+M`X?7iWrSmk0EN~}Z*HUQPy z9YvTrB*7uR3lkGrEs|<-KM`Cn9TKM6vBsLb5$@QLt~5W70cbl3jo+SdQc=Z#Xm$bf zGTQ63m1}ahQdG^|=4qt6jIi459VoJw@H`wws+2RSba2T4omYeg;&VN8@{*4Cs3Y*Z zaEu+Jjy$P+kX-~t-PjEgyCdo>0+a;lQivFQyx5wK(1RVUxYXQ)ofX%<9O)-`z-{eC zrC4)d6+~l?Jp0M~jX14OO&y@^aICJd6Vp>{($ekHDnMWxJZ5zMjn6aC!-oBgg+eMz zrl1g~pmyKE*kHcaSsabJ2k+Y$A9UM3(M%x~oL42eTnh!J-!ihCL zz`$E0Ih|6ip+A5@F)BB^ZMyQoZQ;hm(Ztbh(7G6FG)F@~ zp?=`S7rC^Y6^=I;Wa7aXj-m`(VkEXa!I1#beT6uA#+?qKA?pt=D^jaGk<|+*aq~laf zewXY#etSr>e`viVlTxoZoB_pl1b#1jv+G>}#)n3$AyS}yd%Ij+n8u!k6oAq|{9aRq* z_v^-@aP5PJzN_}I(OUa1qoeky(N_Bbqr3J=P>R0Hv*1$R^}NQF~bLLQTep^(mmiY?KzzU^YX8 zi+~i+y@2j1#}cCa6ZqSzc#H6LvnUmx()L_mdsO$dXGc}-2Xwu+_DLNL0ohan5^!rxK+eE{0;xWtuTH~n_ptDmAB zRPTMRdY7A$hEo2t)?Viko6k-$?ysX7sNG+4)q5)bR4JT*nTkJ;K~OGnmHYj(2@5`@ zbe8D54_84n^(~OwG~^Zo5r0DO^>Lca)OS#^UL<9F#co8}t(4h=K(^w{LK(;eRojJX zIY2b-R4IW1#{UVS_5rl5O}4EAV-lkfV^iq#>!H)3q!1T6y%jpW4LY54xZdv~txZk{ z3b+Fk0s*TD0SW=!0ML&C6memsS>$?PY;|FT7GaD81TA802F5`G?g8))A81K9YO4ro$9n-IHQ(oW%+4Bvoo)RnHv5QA@%>Dv(=mSK{a5g8suSSJ8Nz>#}p z4vCA=Q&!#3IC@s;T!a$~@kO6<@_Dq%GmtJ>P=0_O#rUCmS3-}dPtU39J?O3Xv-8W> zdr;Q9-&OAqPo-}Udgs3v%W^z{Z2=5%`XYp!~0YEQw3SH1Sx&*qfl1KD4iRs}tHsj^j2=q2(!x*%f*7N>pT^R`q8Y2|7 zzN+7V(s~i7Zm9qj87GECsGyBOl&~N=V2`x<2zA>dM5s^)N71|IL2q#_PvV;A^9NhMf|;lKfzq;3hME{#&?SvTZo5FH6Qxq;9X?z z^@Aw49Ngeyuj)xiW8KujS_9bihUWXknYUfZCXi8?D&ztj{3&GOU{xP# zGHOF8sgs4Y+hrl4RmP1-(+4THn?iR|Xb_>SuUr?>;*?4C`74=zX0c4QdsVeb3J{UE zs}wt6?AHNF)){eTC&G}0GY;P(>&c-`Xl;RjBF5t(#K=3q?E4kP+@_(j@*u`Ye-0&I zLt-rsV$Oy4u`)8gA(|3Wj9|EQF;$NTq zWD0G29n~{Ah`ChT35zWh3jMrxF8z=Rguf6SAS`!jE;eS8w9yjJ;r)$TBd(EX#1?J} z*MB!oUU@k-Ki0t&U7V!*cN_V@ej_&9Py}A0M!1Lo-AL{fVjRI99>6euG1ogOJi>fF)&2tJK1F^r5AA8-cA65H)YFB#R+wj zj{p^|VedTrlY)-ZR!8W?Ud$=*lebZHBLXgtPOEl^0Ud)D)q^iMh=?#82W6pYUnj@7 zI3%D%Pw8cnzWOf$|9%8$zm_-RCB1+bS%c?jXERdBY z)Wh0Sl%ob=c-sR)4yssouKC zCANN=Ps}^2IcsH6B6uRD;Ohf4%`!RoL(vO{)fO@i7jDLgt*Bg{EogtLEz=OtdVRP7;cLv^q`Al%GW#rj^#b!y$O@k@-xIR*%NCk{7P1bZ)*j%# z)OyieV|APJ8mNe|HvyUtnU97FR(OH=Q0Sk`%Z-bM%=N|zt;M`t)2npjsRMd*2%#$L zh`AEK)^U7=kC>c%%hhpTk6);L;o5*05s?kRMmT`};u+o(N+BDKaBz;WcQGfwR7MhCV~ zqGddGpv9bP9GTT^*6vK2bGDf07?0eIhy^}d=vNTY4XA4^<0HlA&DBONDxumwS98o< zy&2_NtS!jbEaM;Y$H165mhmfX2q|^OH4q=;B`ti6a=&#~19HQb@m=khIe!C7QMDC* zSinAXAe<1{FX#>C{9P)$(Rk=?2owq}H$ECdKh*C)v9pYSy&FP_?xz~4_WKVUp)!_n zLHU zHwfs4>>CdpD42Ix;pOHU41pnm`jxxE6^Z&BbJiY0ZO*%vFd4TOwwM?0f-HiDL5Rh>n_2$8o5UQA(CL@b9(qVWJAArK1f_Z zvKt-(!%3%ww-E1*>%zw=%XqVsZY~J_S``{K7wDJFQ?W*nsvFxGq}I6fIM?vW0|jbG zzN*TsHol}aK%zh(^(@-{)B)=HTH~tY=Ver*k#tA)qlHyO@1-YxXj6V;BPloTKfBG^^ z09EzwDc~)$LRD+c>Kfx8_d*Flt1L3UT>To9K{q8^#<7V8Bw9!WLvBalFGJnvq_EX& z&JAB{hBupY`CFef>(-j{uYTbw1&lcao?U}F-noxPIK&+K>c7lGsNez& z*anQ=ZVbI^&ACUJg!}I#jn)E*GDaHAx)F2kqh@V*kvWfaUh)uiE@(Tan~@%-0Vqjq zK<$Si&c<6X{}6o(tTD_*-KZ7a@jv?#fB?v^`KHr<(?VvbW)V-bRTsIr{2)4U zPR#;{bf(2TcMJ+SK~j3w5b7K%nU=qz)3mIwS_<9}s~@#af?=b8C}0p4S$H(#kMBAJ z>HVf&plN%~^Je%_bHyDfO%v@7nx~D2^aSv(HGX*4^H31ofYqB8LZj)8^UZmfj2EJH zTOl(v!!E!SPfUjPn}5vQj9Ru7%$t!9yuFBBVi`9d!~8_pULjo7qrfnSEQcn21zHB! zOAF>IRJ-A2b3Jtsh1a8@3#|iCROh2s$nJ7;3+h0{n;RqsJ5XocP6T1*E-=caq?XYM zijc`praGt?|TN`cX`6Ab}>@Eg-0C z5ycKu%oxzyLP+Xl8mV21#x)RZG6JA#phF>8pg5wh3=zp2Kyo)oE`nq-c&e>?nC4NU z`It@fN&WcK=9&+KW>(#MhN$^}yI;Q>qscN(VwRup8)&Z>A@l4S<4yW?L~sivZJbC2 zs)r!%vkNdq3uXk$;6lRlQ0RH{k3#wmvNX4#^l}S!Z8eHFTgJWwbk2eTD1!epx|? ztmF?EdQ-@}C-gKZ*4NE99|<*pvsc{;1#yHp2?a6ladX*s%sR3Lm%$pmAlz(TD6GKu z95@7BL{=aT^E%@nC%Pf6^I&_EhOIT;TE!;d6~AT&P&o9k~Nn2W;e z&HC`;=ISEb$8#Z7Q4A6cg|!&!%UjIq77zegJh`83J-unZK=oAvvPq~gn|N@ z#3rP#Sd4k~`fyA5(@n)5A1JacesK35Hb4;`@#u*xvv%f+XV6& z~y!?6vEvUDKLEs$Y^Shzt=3zAGE#{mCbKV&QAWmO^sdJTa^Z;ghtPM!C zn!u?AXf~^jZ_cG@wbpodjuVWR=aOx)7*kH&Mh-k=F579=8^5^Y&<=ba=C6kze)@&a zndg4aJpXBP&LifEQL?#>SE=iC>j+FLVRFOn?J$j9W_?_*IxcC z@@#wgkU8tkn8AGZ@4Fim$0VKPWLZ8SsSrRLnXl{EHcXa%!ofo}M!`JT`g|FZCRNn1R*>$KY9 z6Mk)RObv3WEz|-%khXvK8F6Es*mtrLVt8S z`U9!}T69rDtiBJIY6eWG#)VR0O{rC;r9EDozV?`F{KR~XmB8Qr#uUdxQz{N#qKC<- zD6cRcvv_9xv$M&WhnaOblty@^Yij*WI`JD*9A?vd9j)fs>UC0pW4F%Yh^A zX$mbfP#~`5rqFH-DdB<&I)%Iv*!@QyxE>T zKWEnc31-i3o;|z0v*$J5LBL*0;isb6^N+0)sH@g^d|!AukA?^9kLy?ZW{ywSPceOd zD*gX%`kZPYoOb$r9@GbzK0kq>4~I?1IqC_byoNp^W5-<%yXVKo5MS?j6GtSE#^7at5{nc#^QB5Y`0f6Od(ep%k&K( z32R5)_@x#;f_2&X9QpnI;URlPxrmZ1<4Zd2V_;JQ-|l^ikJ_oa^;fR2Q7!j1%vDH5 z1A@B!h9Whsg7n^T-@kOlGG3}hk)rNPNOMZ;i{Bc?-zoe0J9l~Nz_{r8Kz|QN; zHG1bHt&ywF&B9O8krj~$>D z+ZVJJNX|02{uXYu!Y3^w4>zo_1hTutc=~{TF?qxeg$`l#CCtkqGmGHCr0^o^b@*5Q z{_X_!>OK)V0#^kM-nC|z@fi(x_ZZvYH!+?(pkEp?hao_l67c8TV=mOA=fKGXOP~`j zdkE%b6h7C&{;EEDHsuVNoekJUGVTe%X;KZ*Pg%x~?t=ef6;y{w4oTy!A@Yc*JZc#e$IRZ1*fxDpmbk?(v12ht$0`eh zrqwv9g%96HlJMZ36L7;BAH&-DLSUQ+@|HqN?Ic&{QZ&9E8tFEKX@_i65=O!y^R|T9 zcL*69p#o?u-DAEt^sIRdyRjF}M{o4N5s&RkxYfGh-bjM?N6ap)Arqf7dy8fQRCb}M zFpn;~7v3J)ugIHMjGJqU=5^swbM^0;7yJa3wqRWxH5)=}(2hl?X^9maB zU1rA^yt^~l?&D@sZ=MG~WP{lT6^BGf&U+@&4aTe1Yw$pAHCGycb%4wSB}(65DKbq9L7#oP#M z=n$whX4BSni+O%GO$V1*dh^+66LryFn#C z_hGM*HG9E)2kmS_na_RA?Bu+6hQwy{Npq>l`HWV6o-o#s9~1M3oMqt1dEcb;aza}- z3g{=Xohpi%8%4@OHEq!Tx!Oyw7kTHZJc;|r0hIvx>p5nwG0r+^wuj$k_PmVQ?w>S_ zfsMu^2lPoyIT*9d3Xp>><$Ld>S!E47yyqIfsG<$t0;CRG5>^34Fd5u)X9MV5X8h+Y z{icw4z44yA4ugT%BZ3o<)WnPC<>WVq;~#Qp*6CNmBZUGVMHZaT#$!bcOw2pqsc8Tg zk+l#TCv=413G?v~wxHhD~)f~K*OxS5ST~G!AK;4OTS=&x%3_cUN)CrgP$$t z2T03m#vc}6L-!l+n;q`fFR4TC|C>g}Ux)F*5S zF`d>gW=ACkA$G|wHuiznFPInIj7b!SA;|Um0dxI3F-E&F%CCh}y1{HNm`e)S>p4nI ze5ru(0s7vGO>uLJvEn40`7Kq8aiYZd*NFraXYFyI$3lYkrMineueIW4y8(|N#+32J2`X7{ ze7yR3bAxdL*@h2DcI>8>qg>|!)EgqbHf&h&`t0!8W$f!WE7~(CLBL$1pC%O zHtMaD`u6$c`Ck+MZ?nPZE5LQt&|>a~F$0>aE#qesaNk+RT5`3bn})ITXM6)mODPWb zvSmC0SMCDiYY+~R2FltjV;Q>fHqf)B8~y(&s5r3e1k`VMi*e5L`^;;0noZxvHdHtT z9W+FZvW#yQ>CD7=#=C34({sabHkVGoz`<@)c%gaSQM025p)Z)NQS-VR&|_b_8_H;j z@sSW6tT`ro2le-w%^S^);YB1?#&1f_To2VVE!{^ zza<|9M_)77que2kpbwjy!cQ{|f5bF&7~cX7_1i$|a%i9DAp=mOH3>)!ACCCb0v(Px zM*fk~vk_Qe`du%c1t!i$lwDx*g5`_oUPTf8jX$}|hENh95J;$@_t1N<(u;y3 zARr}xG=b2h6Ho-Cs))2u1VlO_N)xdVKu`ez5$Qz`L_tsl6L8nP<5gI|90&}lCgGz+J(LvOlzC|=N3;adFo%WL9%I zry!lBySYO1Q&*9ZdL4C2Qh?4AX*|wMgF#L@zST*yYBrsmj5POgmZ>#G^>%rqamBNI z+i?H5&}RM^sYXOKs?uS&k_YCD>v&+kK_Auk7oqXs7%Pm+F{#I8TBI;#s2WBy(oh|& zCvR)Q_Q5ZKrEK(E?Pdy~F7dxG zJ!V%9aXM0M6rjE?S4bjlH&s4LLp_0{zLcwIb% zZeG)|=8f0$y&$r@IYONWh1PI$k8+DtadX$BQ`J-S zll&p?P*jpThi()Pr&dR;Bb>VD$UrMKsi{r(npUJ5jwc7lx?5>1-fWD=`v>{s@vh7% zP}UqfvLRTk09N>^1rk_3SirR8>Xe_oJce9YUSo z#>N>pS`$LQR4d!mX=f;nX0!@!r)tUz$9hL#h;t!xpr-23qNx1Mchm5!Mj0B(rVsXp z=ga=^tS$x8@O&%0nVJok2?6*FSy3!aK=Z}#G+&sWjIt4a?xSO=i2tV}TS_LiAh1S< zi_AWHYxS>+2j?0>V76wtGBlBe|a_be{n<8TM+p4kmfJ3+@D2V35W{RiBzX@ zAGIrG$av$wQwS2rHz#Qdfzc)^z04f1<^NC)8fmw>U4QKD&vfvn!gq&{{&e zo<{3uBI3ROGk+kBnZmNd+|IIyz{j+M7`3=QLr7qVTE`bUl%nEw2;H)Cet#|0 z()MY0I%jD;MlP>3Q<6)QhepW^ZPkc!c^nlvW$|nQx`<8l%w|t*MV#IWH%kjQ%`jDR zCqK5#<@J2t`0l7*EM(j^}IihQ)l7a&!k#OaYtB5 z@zhqvh0OCxSnv*&5UbWwLRuF?B^+R@TD75xV@_Zm`|j%1(u|HH|wZjh8FQ&W(uJdQ8}o2W~%9?p*4GS7p)mBRP6{x zKPRJ;Pd7}>Y-mu}JC5!JIUmzyi7-09wY|d`euJx!>;E{vn;|FFxkC#hPtco`p*K;@ zIb}1J&}Nu#66?|lM;h;>FL@(O(;Gq6R8#edbZbCu1ii!R;3R8B+20{`HTm!0n|=qX zl$!nx!Xx84q#l7n>%dKNZ@Kt};5$@Xbm!jtY)aPQ^x}kiQ7Eg|S${U}avGY1eQk8s zv>qkZR5ZPFmpVXNkeDWx4oYVSt&$E`Jz2nsRuidUx4N^b16?R69TG zopp$lU9AtM8}}i#>2=1CiWD90eAMBN8$n&7myzPXE2_>qf}L$0sMl7b&*vlQ!Xy-0 z-JhaD(?a0J`bTO-j@lkt)kNpP=8x!}RaUxIp?aqbA)yBXIiXYh*6-absNOw`*Sp91 zeej*p>clSAnMupljNZMrTX}j)@BT9M?zE^IdiPEt<$x1at>7aHpgJtt^E zrdQSw=kaKstWm>vK1@Rg?q{lxeRr7pd=6cPcr$}qucn&a92!S2(yCWleVJBWdnTIXMrKJHIX=sH-< zkb(5xH1SUF-&>2U>C)&GLn~xQQyZo=baYTVGia55m~(uzT9vPs9nf{MJ!9yN!<=Jj zJGi0ZrtC|#DSJ{jrGafzYO6!zsVxaO3r4CtI1hr2?NJ3>G-d}EFpTaDs`aR=QnEHDlz@2<2v&PkN5{P5iGZkYKC^*o%qXv7SPbohf!-z@03y} zJ^nQU?-njy8KBksxtxsgbYX2aT}Pk`_94!K;F{hQg64B*-Z7Ata3;~^0sl(D1F!k0 zQx<0wT~wo2Az#oJb=%mxcu${o;18cAU%mg|T_n)c|H=AFJ54Rs4dl#pjy1%a@_X}q z@1lM7r)U5EP2p7Y|4+^Ne^+n*UsEmS-4}FO9o^1<-mOhF*AFe|9fUjS>bN?`Djsr> z+J))@sLT3tgz5rvJFC=Wzlk${oVr*|pNOIJEVX?9AT{YEs>}5>#s7WTt=B(FNftD9r9sSpE0_o^F4O+zYq zbNcmev5q{arz`0+r{Acrq=%?Fp%d}-!`FFp`X_YEq!B^N!L8+PIkK4w2V4G)tb7_zAD%mL08V|sEIty3C(Nkebwwf$0WYC zUaq-Yr@1?wu7O0j6>8FbG`hV0W3WRPj>|duX)q~66Z+;fRfwZWGZl|!-8(~DuXJln zri<`})z$C%v}@!2tKWYQQJ-nb=S&Nu8Fb!z-rWAA8+FjFOP>LtOW#{lP3`F>S0L7( z+c)&*_HEVNeiH3&oZFv&)t}ohr;`aax8KZD`@3pp-;8JWs*Ra5d%pTj9})GZ_VH?J zPZzn@Qx&Dm?3>ejULM!MEkWgT76ni8Z<*7)KC5@-d+V#}f__8iu)1#2Ipi|+-~|Jv zqE!2$>m^Inf8vU!@AI9 zH#D>qjX8e~P&ak`#UARzy6WS;6`jjjs8M8fD#SUxLnEBX6Y2xRG;OCDA~n};ac)hT zVa=xFx|N${10~ryAT*ACptA%yv*><3W_9+Arz3+>HFI;G zqLYw}S_usQohtl4= zuIJz0k9A+9DYAavk)CIx4hmNG-IRjk-r#45G>HjyCYL*+**R7+@tfF40YihK2={OFV=nn1cE>V{h=?)*A zAmygDK5DHXo%`i(M$M&Y!EJcgEqazlG<7pwU6CwV;W*vGsx-_kd7M7Jw2H1d z#nFCh>U)_T12~{8aq)t#>v8B26gI8mzO#aDM zl=FI~4)jLlsPUAcZ0fTXLC&&%adb_@`6pZ809|2-qW+HcxNVihIvO{e@Yp$Sn*_RrSW~T%2uW~;CaG?d z)+RJ}2h#?0j(2OA3m0ffgIc(dV6I!}pp5RUJyw(XZYc{n;%OlVb&I-$C)_ScDJ4`N z*q!ATuSi8xoi{Dqn&Y-epzEHoZX>TCJwhWk(7|*#_%fZMP`48jD42~ta{i^dHCfkd zgLD}po%7+iz;oVxmbnAeHEBMAqn$S+=x_<6_Ce>uCj)n=2~<;yU5Lr#_IA zJ5XLx9@QM3gaBRPc)E{?tAy&YvQom5q2EzkoD|ZRP7mmFi*$J8q}xWiyShpr zHl!YaeoH|XDkPl&(l(Z*BE_rare)po310ILrQtoNTWC1-W{YS8mcR0JZN}mYvoGCB6}z^dRiBu} zsYB-$In-rrb)I>$4|Sa(&Z+Dt=>6h1xjB2%k^4o^o#YOVj+su>{=Gwd%6NL0FuE^G zSLao~_xgYnw9&<#N22g1JewN+u-}WPeow7fQA?cS-H!A;x!+SCMe}>Gc%$Q^ zTe+&^qh%UiZ&JuRUh~jdndgm+Q zJ|~ebe`cW?rt9INbZYNtjEeh&HwS941;C<@l`~`@8s8T0U z&-pR;r`c84Qp4${J}awcn^`(gw@v*i{Z`b6LgWeX`j&ldmovIqN2%sLlXC><3sKr#?NuLI!c2SjXv*r#>^e&3!q0g<->XYEW zOTpd>vQ=?OREf@~(ebo5XnQ94ed+G@8{lb z$tg6--KVWoC#BtKDQpoMdpo!dC%O4|kT|1gAB8%<&}ZaIIx8I2UH>vh?efCTNA#*; zU_Y(g}`A>yhfEnpHR%cep*&7Q8~Ax~B6c>aZy%?d@iLy;(;0X72L}XvG{A zDuzboRkW6E6Lr$-Xf$p~wO!LKLnFNU*jis2&6c<=RVRJGZ8wa5)k3V>lKMuq*rf_J zno87152GyI;$2!~U6xvA6T0uC4!m-)^uq)0fIzJ*^m*o3I%%w_jQZ#Y(r^k*& z>YmkkQ(dZw66)4zUgz`RK!0`Fq#5i<_EmSglY8s)s#D_L`clvd zb^le}ZO=lzW)yYYG~rGP1j^7NIKLN<^m_5vxfidZLRBwLc~A7F`~OdMa3w(C*V4n)Im;104S;AapHIKvBRtSLD^2X1Q?=D}U!oqSVdx;YMQwL94G{D@ z9(tvWBXQK^on<-IecwCk8h=>)L$?^s%lwtl8)+sKnM4~!D;Viozv_isxsiQnElM$3 zfZ#k!Hx&W}qTK>-(TggR+!*RO^3glyqGK{MtwmGo1oP6uYg)n@68eVwVn`rX_1&~0 zkZS2AstvzKP%TR>@TyJ+av`^!I0EcKYQ_i4q>y75bB z>D)JJjO(l>f^k&(W^r`1Omr(br-A~*)yiSDOzafB2i1OYIw7k>XKv+{Q-#ySxfd-5 zq3w#H5qdTqBz-8YIyL;DhdMx5<2I&=mEU3(^$5I4og1w$IFVbmkEj1T zr7asqu8vnJ?TbcQTIKBwqe2NKpd0qdCGbNl{11nEM*?lv%X+h@bW-tSXvw*%m8S~p z|KP>{%?}d23Z}~knbgwI%4#q8d)a%k(``#1BcK!O@lLkcbk04Pg668j^v~`mXwj?l zNA45eo$qKm4T+(hS$GchUw*e(XMkHy-483{mYH|gEqR~bhkl2W>O|Vn{%t~|T?ab# zcSh}?`R=5i>g4)iG_6*n^EkCi_wiV@MzOdvoo+)n2_#Z)U6_t}x=M6~UQP*CFDKE_ zpnmsMZ*{^-pOY#;r_?>DJCC5B)o@$&rS@^cjcew1oJ~-RE;UfEOlPcX>74pwf9Y{C z>aWXEsVdO4qZw_-JnFsacTG`Nx}HdP)do^iZ>#$2VM*SQSB=JlQIw`p*tgk)smzZ^xvA%*&ZR)>$!1(2FVq>o@yzMDwt}eP@qsYw*j5` zyy51b!z0{8cSK)xeldy8{FCU+pL+QiI@w8C9$hMl+%rEN}rMlSM}JFF4Oz_RV``lu3i*SLs~hi!r5;3c=!3)Jfx{> zwX@vP6)CYdy-;WM=JbMg&~5b#n|R?lEep6qwM#2^X!=3xRD)@@MT`4r6zM=ysEIVu zUDH!daATawxlYihJ`$-jdYew9XqI%4E<_v%R$Y}^=A8Q4`9-=HkT<=$IUdrAHjwUc z&=T_8&fB!EIvxFb3i`DM&hPX)sOY1+^qXb;rI$4KcfO~(&6Ge_aW~S1TK^KSy5W3o z^d!0(tA9yNhcx_4YV^fx8ZG`$FJ9A)wNw|cX{@A^yi;jubaw8#*?Q3h3->)!9CB2mK-jb??hr?$C^~xm#|H8{Wz-TZ``JtfFf$q~ zi$DL1$6ET`@o9qod}0f6p8Bg8ew3qrFDN_;Ql3Ci$}eC~{<||28VJge9IXp8hJICD zASmS*YMXyA#!4L{N|4xBY$d7$)DQ8%$Lc}ogn>3eUiz0;shDL5ZCyT6O`3> z$I;OeiMJpFKj@;;3uPEd^C z1q3f7coD&i30^|*Qi8_{URLn(Px*AO9ac*AmhdYEk zs|3Fxl;?dR|734Jri^R)?-5O;3Xcd%8Nc-36KXHK?=hi2Ss-lhdco;eDbV|-jDz~` z_k1D5e=m4e@(5#G(|Ia*+m$j->A$ygiS~GeF;3~fm-CR^c6?0|>fw7Yf4$`PqyOH@ zZOX+0*<*DsG^S@l;aw#{@rXCqy*NAV$m8;@YS|haqo?0lcZ^TbGyn*3g3I0Uzx;)gW z{AQkg?5aJKqJMR{oqcD-oAn&bfBQwn8-Kxp4$aNV<1XIJHHsFTq5 z77(w0)CGJP|KJsH9X|$q9{*q}xQ>4xd<*|z6}XQ76#Ojz;A?Qby+_$`doMz~&VL&` zmiN~qaGgILpHg7{Xm-8db^apY>i?-nd2nB;&4cSct2wxi?*QJCf6xN zRX3-)ip6|fQTOjXv=8M*%7-J(k^K0t*!gft_T_wOL0><>{=7Kn&r07L(Z5Ge{6{%< z_5O_wU&OBJ@fm)uzJ(b5x#{1q>;3XR_dCbHH?W@vKf-9ExeEON-nT2i-U6=vpL%=_uFLr?yNWaWfu9X;>Sgf1j8%<*9xA??_ssv& zjvIuo&raMBUIyR7K9F7IG5fvuAYSMB09@zUBINl7;`MlX3|!|qFXTzf=h1q*^mv*L zT<4+B^mq^4F8ZbH$==L=>U|w-cyq%u@i?pBSC8+x!S#4uTo{*ILcFeruHZUPe<9C( z!&?~TY|qDmE~nmK-NAMKLF`yRY965;I*+dBUEn&;0U^(y5U;oQKXARjG8pF%W;<-i zj^$|!uJd#e@+>giJkPmexY-_Z8|N)%duS{8DZ_Oiuj;Xg`a%!vXSy55b!$Jw`#RF- zA2_AwZyB!6H*|e21=ss!Gq`TIUxMp)@*}w3?`r;~9@tJoh2u1%aU7ZFheZsp>t*!6 z)HA%A;hz|8?k{znM?G|V(0>y>8~6?0p8Uq~Vz#RW5MNvkl=NsL#E*h_oqrm*J|BA* zT*t2lclmuk2G`@l7woG38+s-5zkCnzI{yW5J#PIDuJb<>@@IhKROgQZSLITV!r(f8 zd3G$nH2&&iO~u#nGW%b;@N>1_`H=NwxZ&pUqUW1<-cp;}g=)Ty>7PEIX$I}T5$~55 zz&o?|1lQX;m>suwBE;+b^vj04hi=dM{QP}z9k1uhI)01)--EUa@q58_dpHcP%YT|3 z%U^=u2m3KSmsj!6a*X=cgrDR7(&u|B-kiUi=Wph9j^SM2DoVrrd))#lAFlt0U^k69f*kKLS)sQBeP-tctg zsc}>H8`$28(f?HswY~bi)N3hEA@xIgsQAL(Gyh9%evb8~`z7tV-a0_MuD4$7|9>Ax z`ud_OXC#+FebfDxE`MgO=f1ojwEw}c^>L@lZ;qQ^8S!Slz0Erw^DG0`$IAwAU2i+t zvEHs5ZXOpojrM7JBf$p<{xiESzdl}m1=sui9=I-lKp0Q;u29vNjsEFzpEt`pUX&+t z{pvQX~;eGIA;hm3KgFy~a? zmU6jteb(jI>%et;_zYav=Qr%w9_||6zZfYAs%z}+xE?vZ*B+FA$Zoa=Xa>{<$ju%SJhe z7~b9RQ-=32{9n$e@|deZ8uRg@yonM2x#4DfU!z|&eTU&@okFxK0A!T%Nfr3@+MH{W-!;03uu!S`KZcu!-0 zMGN;$8XK<9snmb#&e!c#e$y`*-pk0Jmam6nd=;J~C^yUVli-0ZVhMV~dsLq`pn5UZIX8dHs&F!6Q zxLI!p3^(J`@_?b<*Ypa4Kf|v36Mf&b9k}ktUKaAG{#`w=pV#woRUY&FWC-+o`?%kE z1H3W&0`Qyc8`xF;%BleT_{xaSt&zU}WVm_#;ddiX4I@5{(cf}c;r%q)@WMuXtl_1| zXL30Y82w}|BmPgr>l;4a=qGy{-rwl2`WW8D=ui3@p2Ij!&Gry)9CxN46}+@@e3|hR z3~yk(Z<65Q#_?#zw-@{XyKbMkxITXd*X`t2Bad0mW_-M>JX}>?Y2yr6`>PJ`kD=h@ zdD|u!{YFDJ_3d4VFU)y9G2+eg9AsDD8qq&}UF#^j+RVm=pJvzfpy!7-!F4$wu&d+3 zEN5=+-*g_ePE+Re|Zz8GIbO|5LRF)bA7P@OYzttX<##*2kLm zliZGZSWC{ckH;HbUhIGLHEmT7-E|@8ds}|4+&up=uLqj_74}QIzglGUC#wCV;p0~K zOS+zQf2FVItM@hgE3;oxdG!4x-7l#;dFh{iII3dkq1^1pq6}Ag^nHiY;CekweQ z;RSGgf1y9P?%#&mA&b)G6h9$h8sFjjqKEFTYMKdk&acC#N=o|pS={;}5&D-ZDTQ;?pkhq4OvPxnn_ z71BfPmrmX@{$li>1q|P5oR69DNrrbb;-%|px(`?FUzbh&w_o}HD$mc))wh56x%L=- zz1rya%=qo#I=(+wsLsP_g2sUB_;K8hFn%Vuj-O}rduG4!t>9UW{;;1e41G8I$^M3) zH{#9w5ym{!^frP|5&TQRp9rptrm9=DlU597yH#F{_lMbTmFx94X1i5>gxgaw&WG(* z&%v?X-sgC=zf>Om_`hwpJe_*#c+uwus+%zTNj(Qw+imuf&u{@$c}ntg_3b5ouF9`t z6dmV!Qt_qepI*mx1$+aK)A~B4jz7Zw1mbo7lhIM{;veq~{ioj7qWm1|*}Pt-k69Jk ziuaFxUwz)y1N;UbC&R$?dDk?MUG&zH`E>+_|%;QD-N zm{C8~R6+RRa=)(jmpP8K6TCI=2NiFg7vE~` zcnv2?3^?uanA@_xNeVq#1e|}@$V7C9_>^i?bPpAQ|+h-GYRZg>g_JMdkzArZ7 z&3af1@p^pU4zAz#DpXu8d183q;qg_PU2ShCey+aN=jY0GU!iE0 z;kqwUwB7Jm`MLUbo}a5c75TaPwwT*Ly82v_dMJO{d**-XX?PFA=NmrQ@NW#SVz^@* zU#1rkyq4kSdeK(}-)Fdaf5E)2-qR>gY#RTC+Fsp5i&P#xmZ|^t$cS&EfFBEue#0!MInOfdbA!>JnB~lCoIiBZ$?1Co!}S=h zetgvE2Ta$;wJN{qqmA}&=3ioXH*sJ%wNlJGk${MW<5M>%*)L3 zylQwiE{poM*l;udHp2%R@u57w)BT&iP8$jSNr?ZS3K;W2v%hL=xOtoohCKRy);MsT zf4Y&!%)b@l^?k0r;5yG?Ahj8BhSRNO&|I78O&kt2SoBc*dV;nKdf7ftxf3-8l7jqmLZ}jJ;>wa6kujwxv z{ezi*jp1he=Z2f{Bl-H0%5RoGV>Z7LC^zF{3?Jx+cwZ+OZswV7csC<{H@mK9Jx(12 z*Y$tW$Ya+3Bf~2i`3v*?R-Ipu3+2Ie{yOYxd(HgaAzqIQgTQs3F+!ddhMVp4Amq{I zJPEGzUpDfX<;c|XV;*Yy1$^}c5Nzs-4cd(ivQyicvp8REF#Gw)L?*ZWI-u3SA-esf&T zW{hh+ya@lxFvHD$`=a6IxS81)*G$*fY1I4nH1fY4;=fRCjxQ~Z@vD*%pJ=!l|Cixr ze7G@wnSN04H;j3T8Q;(tzf8|*j7O%MACqlT=ysXIU=JQPS9DH1(4;TDL!7K9dj(O$@UXYJFjNdJ|KA*w(seGKGr{@C( zJx=gn1%IB8N6a%#@Tscd(*xr(@eN4yGlJJt2dE{_yMiCgZI6E}cv*GgLk}#^V!p$JRb-iT)-axlHi{R9$CxI{q(?oV2I#H1TRtAo+m-@i-OmVwdZ+X@cV+dE@RKL zLGbit?eTGf?-M+4IeVVh1m7U|1;Hcv#0mG;K*0|SUc7?6oKplpD|juQd}4VP2!2lR zdX?AGEF$BJEPr>I4 z9$mx!zAXixAoxwe^YLT`%Q;f;j|5L&%U;en!S@NCizkg(o>qdd7d%}ZdwE(5zFF`Z zb?tf93w~bkJoW5(W(a;o@P_s6c@hPGBzT7g_B@*f&)m=+-(T<~!3#CA=b0e*R>7M$ zw&xiy_{V}@6TI#-_WVNyKPq@^6MLR%f?pCmdsBO!VS@i4c#dZFJfj4^E%?jL?RmZw zJYNfY{7Az?{Sfc#4}#BZnUcqh|5xyVt?coq1#i{b9=}KM(rxVV-2`7G_$k4&wYBFT zAo#a}7kk#8XQJR$pR>omEqIdPncLa(JTLfM!Lzrw=NTmUa>0KUJlFFn`P2JPy|1kV zpJ;dnBffZtlsu+yebMffI@^7x;Jsh6$8Q$=q2P_W*z?R1JVQ5oeD;^^K1A^7?)LZ= zg6|MK(8Hdmi{L8--_z5c=U>5JjkCv}?rrxzeeAwa@X~$l@$UxoDy&P$RTzwGSu$X;_ZH1 z@?rM)Cd2K%OYoB;?C}*w+C53|gi-eRJA%Lenms<35J z_W1kb?H)SO?mY#+F8JI@_B{C$?7mj;kjeJ=&4OPRJjWD!p233e6x?~;o~Mf8VSb4B zb(P?eZ=~cg3BFJ8dxnSmDZQ^frl;gL{X@ZD zm|>5f@Rr?g3*Kd>J-*8TJV}n?D;nco_47{zOUf> z1kamj&-0q#R|W65%%10<;MJGgn;wp3{Oi`@kN*L-3$g_V^}( zj}iPU!T%P#&T9MnP7(a9;I-D+^DGejp5SdiwC7nXc)GRr_+Em4A$XpT?0H5BzE1Gi zb@n{n1%F5I;Pv)A6$O7w@V$cP+hET>TJV#Cm)&U3(?jrmg6G|2&(l-zZv=0%*`8;g z;GtXW@!bWF*=mm;CHN`9D}HRxGh6VRf;ZY`&$CkSpik`aody3?@NC=dd7cscoZwkM zwdZLf_-Mh83!e5fd;U1V_X(bNhds{-!Pg3&Zl^s@FTp<&JZzUe&sxEA@3zMe6a2W~ zW%t2ME4Q@csww zd6o*E;gCIkwBXkS@AR!b&mqC99Ja@QBzUeP_W0?7KNP&(clJD61<&-oJ-(md`vs5r z!JcQl;6Dpq<)}T+Ji%`Z-u#$7&v?PN2!2)Y636ZN69m5~cp{F>kmF52@f75pE; zU$|t?vsLg+m+kTW1m7?Czk-jsV$Z)x@JoWXzG}}iN${Tq55H#5GeGbIf*1bPo@bok zn+4B&-JYkv;9CUGcEg@$iQt)kv&TO#_$I+$ylKy~Mer=Q?C}ExKOlJF-|czE3I2=V z)o$DKyd(IZg17v`o@avKQGeRwTL?Z;@Q(!#yJOE^SMa5RKNS3hyY~E>1ivJB{lDya zmI!`X@W%J-c`gaw{=PkagWzF*+vEER{=X+q!Gg0si|Jvin3cgA3 zOM*u~Ov#_!f9id0Dfm3WqaNAwL_M~97s2NW{*B;s{)?fGX2ens$l>FjwH3w~el*6HneJ`(&-!3$@w z=Xpc$2ZBGF(VpjH!NbDr@qGpVTJUn=_B@LP56fhaA1nAR!C%a5&-1n5m9p65KM*`J z!X7_G@Oy&S;9nr6vYE$Mg5cW)eFvJS55<-(B!`1kVv|&(mD+af06vJWo!0{^5duD0m>3Jx>?GcL<&}w>?i|!IujD zQ1E(r?D<7_;tbS7q#aZCioG-OBA!`c~$VE zf)6Tg&vQZW>Lu*)^8~*wc=M9>JSzo%EclD1?0J?79$eZUKV9(0f|rf8=ZP~s%9|nh zU)Bj8QYIyj8DCv+x2!$Bs^QVb`>r)Sr{O!xr{pnxHvi#g^;6SVRk6nhSGD^~g72?x zkDpk}?nUd`eNKJ5KWu3CMvd$~OYolr@7KhhXNlks1YgnAo+qN2-B$_Ty`??=d%;h& zvB%$d&hEpWw|lx5?f!NryRYeN_nI%+eZJu51h3Y`o@aJ9yT8}N?&k$B($gN_U+^u0 zNA|YoS@eqC{}DW{pFMs|f4kolyy5_R{3^j)4z$OADEMu`D-E*e*&%q~ReSt;!P5=4 z$KMvb(hz(68-iapJeSe0{ysD%kLlav?f&dAyWbML>u`Jgzk&}OVUN!~%I+mzvwP3c zcK>CJ-K&nZd+u>|FE!roTLmvX!5$wy(eCkrKNP%lf<4chg6ExVk3THR;MeV5 zQSdQ>pA{D)>>s zW8bmonI`yE!Rx$h&$CSM$AZ5&-=1fi;91_Y#}5#Enc&9-4_#o--$L*Y1W)_EJx>q8 zKNmb|p*_!Qf}apP_ab|qo`QcPc-6)BJpBa!O7J2}?0F^$epc}6OYM2)34TxTwu$yU z>jh7@%pTuM@Gk_vCwQ^t_WYd%-zIpD74|$s1^-U)Vk_-=rU`yk@KPVx^UM@HYLz{H zn&7(y&%WB8XQbfA1uwhCo@a*OR|J3NLwlYTf51W&)op66}BLpIyvs|h|_@GFAX z-eS+6DEK46J8ZS*`B?Crp?g?Mp{r-Nt&q=cT{R4KdbzV!EY-zNC; zNA2;S2p)0F9zRg8Z${xQ^@Ebqb z;|HI%`%1xY3jWE@_B`*LvHR^`?7ru$-AA6Yd&~27pD*|Y!6Pr&^K=#b1Ho?#UhJYh z|Eq$Z5xmVMd!Ai_SG;VGUnzLzEB5%Qg8w6UpR4vfrvxu|%^p8b@Y{kn|J9ynwctV5 z?eX0O-y?X=8}>ZI1wSfy>~How-35O~@B@N}-L&VA6Ff=qLbvRBCJ6qM;5B}?=b10~ zFM?;eZO=1Q@GFAX{==RpQSb+XxBt_gXS3kx@7Uw}3!Wr+p}Y1x69oTB@EU*F^UN3g zuHdcj+4FoPc-s5+_!@!_6nweh4+VeeZ~OaxCV1pO_V|HQ_BT{0+g=XBF}YzDV#(g4fAr&%aRc`+}E~9=}cS zily!GZwcN#)*gRB@K?&%G{KJwp7R-d{+5C#2!25Df=%rCzZLw6;EkHv^NbRFo#5vLFWf98 ze<9;Mv!CEw1b-lS>E`zQiv@omc>5OiJc|VXNAPwn?Rho|eo64`t?YT48D7|^&)b4G zX`PbCjQ?2hm^SwK*@CBOYmbi?e2?HE&)V~}5&S*D&kA1UIeY%Gf`2LaeZh;jv*+(D z_$37)pSJ%0nihYS9p;I{>@^t}CjUlDwX;6E5%)M&RmUP#GrdYcY*U;m=rOLemQ zxz2X4_LALS=wkQLUG4rv@He{I`i<848cRE+2d;nK2Y$F1g9Se< zc&!=s{8I$~RPf&ffBP+a{!%mTepB$;v+VH;1P_~SkAKea;zs||a&Ahz=^qMyTktOP z?0KGh$L^Wlv-?=VTP?81H+tXhKP|L-pT%|`vc&FL679ZoncZ_NxBF1RC$6-|{~>tm zRrdJ#f;+42@u6$%enRkcAKK%43BE`0KLsze)}H@};I%)p$Da_q#yWfaK*5&@eogS& z>+Sgm3%*kDpbhpslLbE~_*Wb4c`9zQ`xwDD3Vu=W;+yUHI}1Kb@akLadGc>f8n6r-~HC^yN=jB;}3QZKW6ubg4aK8kAG9}D}rA=Vb9a`C%bq1+3qj@ zV)s+$>>hUB?)3#9A^2Mt?RoYJepm2nm+W~a3cg?Pu*>#52L!Kn#U6i1@ZneO@tv>P zeS_c`eznK96@01SM+JAU+w(UUe7WF13LbjHp1-HzC5?XXnBdXBrQ|W=hY0?u;QtBU z`KCR8lHi4I+2dymeqHcJzuWVS6#Qes{}8;?ZF~MHf*%q*>mT+!{RQ75_`iZb_oqGo z0>RG-9&yK>r-R^21b-xWnY;G<-34DE_zA(&{bkSJT<~#%hww3#p1#K#$5%$f%Nm{; zyam73ztdIaQSrq``#;dXt4(=1pS-Vm`MHko&haG-FGJ6}HS(bfyIKcQil3`*ZTY#* zGnMmn0Dp_UH@nW0i(gL$FVC-+fmh|%d%#=r>z~1U@aqif4e6oZcbNY&s5tmM_GiGi zu=fH#%bozvzh*pW8F(ze-U?oqUw;kWm0$D6n3BssM#uThFxmOzGeKFwU4C5-yg0vZ z4c>@f4*=)e7D3a&XYlI}!ME~jK8;N-=K*#;ElPIoc7pzfJeeK8qSNtrwfU+Y*5%hl z!Jp&T)xhKVb#L(L{CX7lT7Ip6uHW|%`(lW{&aXFu2dDANe;7O$`)}Zl+0*fN{k}c< zwf=wF$FbLg_?i5=EBHQsJr?{Xzg`Gl*!9c59=s0wA@J$!*TI*vr{(Xu{5SZuejn{= zxPxo}@iFY}!E3Vj2Jg>41^g5C72rqMw}Jo5ehfT3tzSQXf>&X8`2XqcYQ-K29>-o3 zd;)tl@b}r9gKuE(3x0(C4e-!Vzx)fpi?e?OUWLYIeQE6UhFS`uV?QHK9#)}_}lFLz!TYrgBKg`*YkMr9UMOe z{0RGW@Qdto!2e^P4<51i#GwEBH)mEqFEdFz{#Dvw{y`j|QK@o)3H> zdtvbH>?OgEvR4MLGBL<|)CPaZ@eRQtH6)5uLD2Nz6Jay`={Xl zu7kFujqIV| zU$cjU|I8i@{$+xnH$Qk<_M+gC?4`kru~z`E&0Y=sdG=(e>vEK&o#QqpO{hNON3>p0I>c{GO)UN6N>uB&-I8RaVc=k%*6WAMo@8|7p3x1Nl zEBF=m0pM?O{?Xv?u)hhulzl$<9`+Bw53p|qzsLRs_!IW;z|+6w*XJ+b>)CICe>ugE ze+>TLeBZ+|`rq~b+Vr0PIuH0I_R`>gu-5{A!rl@*%K|_DOW=9g2Y|=2j|H#A{uX#^ z_Ql|%xPI1y&tTsT-ktLt1|P`&3-}oJTi~k~`rG>${CoDWu+;T`fjtlS9rn`TkJxL0 zr(NXdZ3!OE{t|cu`vCAF>|?=OF81@k1>S>wG5A3C_2BQZ?*?DRei-~)_Fus7u-^jD zxrFN zXO9J6%w7Y0HG32AZS3vA_px^eKgK=?{0#d<@JZ}5z(=sp1MkEBK6r&0em$-PcewxG z46e^Z_JHT-_(R}@*-wF&WWNGlf&C76ZT2VNt=Kd2jV?VNbzzSNAIx3^d@_3l@K4$6 zg6r|ICHQ1MPv``$&#(G|&*%6N;2*G00pG|z4}2&4GH`vKvk_dM=j;a8=Q)SK|K$8X zfj?xw2CmQR?t$m#^F1d^>f^Tvdlv9A?D@bevzG?1&t3z(Eqhb&F6vCjtohkXfnEcdtTz+15I0Po121m1`J1o&|F%ixpQ?|{!_4~j^=zgDt` zgX{D5+~9iLDFLp>ovPq^+-VH{H^1+T;8A>>_5=@O9|WGrJ{$Z!_J!ax*_VS)WB&|% zFdr9R2!0U!0OvUgeuDin_$Br~!B@ZT@2CI3i@f1`hODXgV>$LH@S5y}!JlC-58jHs z4tRU^7U133Uj!e>9tS>#eJJ=e_6gwcvA+erg8hB)4eYDIKVknEd=L8<;NP+z0YA1Mk4? zXD#?p9)Guj_hH`){ssF1@agO)z~5%S1ipa%5Ac=jkHNRHXW)fa`nOKb25_Kx78>@R}{*!zQ5 zWnTy$!SlNng0BM)=J;>HGqRrq-^hLud=2|Q;5XTwsMPg;fjvF=G4|r%OZa+71@O%5 zb-^RqTY~3e?+9Lyy*IdSxAEY*-A)A8?RF-(Znq1;b-P^yuIJI)!1X+OAGn@Je+RDT z(PzN*Jo-Ago=4vY*Yjv6I`w|k=dqc=^?7U_a6NvN0N3ZMRlxQ6YC~{+UfLF1pOv{TT;Ci0^4Y;1C9|PC(?(^WW+@5cN zS7rYfT+egU@`B*>w42M)KRqvw1lRN2g5dQze>w2>>~+BP{IMmtzW&(>d=%&D3$Cxv zj{w*6&?(@09y$+P&qJ4i>v`x#aD6_!AN=xs|2X+h@YCR5@^)PX|AzezxSp^52mU?B zr_Yu8I6cFj9sJpuep~_Y9_+E;L)fc>FPP`&X$t-+dk63z*n5Nj!9E;3?c09-Dd2_J z-v+P7z5=`*`xfwi>|cOSW&a+0Ir};AUF^5P53oN0U;U21U72$G-}P~~fjuAiPWCe3 zN$hpNe`IeBev!Q^c#U`cats1*!ag4SS@v1ro!OUy59H%wBlt-6&%r0@;|P2<`#JEX z?6<+!v+G|buIsrLx98A2sq6m+A1~R!^}H_zT+i=Hf$RBQRq($!e?xFR?`s3D$IZ^* z|8br^;NiSo@!*BnCx91Wp8;Ns{XOuC>?^_bJaiMdo^S2~*YnLJa6R8V4zA~$=fU-S z^Cq~SZAYPH!RNBK0bj!28GIdkAMjo5@!-GC^~?7<_&N63;QKhw zV(?S!Yr!wDe+qt&{cG^BS$=trf@fzx2cC!hCU{}?2jC^xL-M8GFBRDHgEwWb3ErN) z1^7$soxyvt_Xi)qJ`H?0`v>6D*|&i&VBZhEn*As6ZR}UUceCFG|Asw0CUw1i#~uTI zoV_&oDfUj_I!_<)UpRg^_<8op;Fs9vf?s7{3LZ5($a`!CFTlPBycGK(@XG8zfmdh$ z6}&e4J@A(7f&4+}SA#Wd9xfF!w(p1ya}Z4fY7|AZ|ZJz|--5DFc3! z<7wqp;JJCbhJbhEJk!9tvcC)7mwg5JVD^pRW7&6tZ)M*P{vrD@ z@UPj=fgfc54g5#;zroM4I|X4svS$MSn>`nJIzC>Cf@fu~0A8QH4tQJk=HTntUjX01 zJ`nsfF6VG?y?-ZxPvH3X!KbjV0-wgd6?`uH=irOk4}t6bdlFo?hhM?p}|oPvG)KU!QKyC_rs&XU*Y(v;PLEl zgX{gf3Oo(>0~^3~`FDWp@_!5dC%^A;a9#e(;JW;Og6r}>2G{K{UE$RGQEyiyxZaQX z!N25kmIlAU-T?d%dpGb8x!(GM>-@vPmvDRnxIQm^2YejI?*Jdh=l@@V|Hbj&g9mZ^ zFW?>7Z-Dn?e+=G~J)}tL`cKE66+Ab440tSiX>dKis19C>CHQH+ zj&TBfD#xD%zr^u3z`Jt%eQJmj!Rh{sMRd_O9T6aQXXz z|II!E{0Vykcu~$j3p|#6A$T43&%m>@9|jL${|P)J`&IA=_P@c)vd0ulUH_%{dQLI$ zn;c&e{2_Z?@U)z#1$Z9z5#Sy9y3GXeUK~FId<6Rf@Z0RG!2f063LeVuyBA#V-^1YH z9Df=-7yC8vLhOHmmtzkup1S^PvWJ5=XU_$$uP2uVKh4|Q8hk%{2k^1%y}+ll4*{Rg zJ|282`wZ|8*%yF+!oCXpbM}kiUvoWN7yM7~JskfS{0m*rB~sV_-1q#~*};df7XS}o zuL$0gy(V}&_9o!r?CrtxvUdm9*9ixK7vlIa;C0v+gD0_n4!(o^9QfRYe*IhrpSr;J z`{47~osy~Rc?o-F@YU>jz&Em&0N=r01^gTKhTtdI+k#(U?*je@dq40e>?6U`zwdA7 z6!2*Fx!}dvmx5PgUkBcb{WI{c?B9ULvmXPW!hRn79rjz`tJwbq|Aaklsnq*-KYJwj zDfWWk*VxN}|HEDfJTte$mf-o>JAqeV?+adseFS(@_9@`cv(E$X!M+T9Ap1t}(d@gy zr?8&^|CGH}>D2XHXR-f!3wSL1=is^64}n)+ffVtQNRl57QD{ub+7Zd=cj#3f_f1 z0lY8!Jn$jxE5LO*w}Ox5_`TpW*$;#3`P6A}J)gP>{vsb2PrxU#r!Skj{ztJ_0^i17 z7hK1;1pk@iJAmu>vEa@UzZ_G+b^Pbxg*g5U_^0fb!KbqS0sb!gBk z?ES!9-rkYm8QG_RN3qWZFU-CY{Cj@ijo{y~e**pm`+o2R%Y(ef58yBG`hL$zrtP=ybOCeaJ^o)HuxNV-{#>a?@vG)Ss!9E0hANzRlBkVK4e_~$%ewlq0_-*#B;CI>gf&$;1$_hf>&ej1g^KY2e{s@q2Pl#&v@{W>@&d=*q4Coa&7?E<@^S`^H$nv!|(+x<2*%H!HZF{}uqR%z4Uz z>+1t`!E1B;v*63wJA(ISj{{%CJ`{Wg`xx+{>@&b8urCI$&h7jI@IxHG8T=3S-QZE2 z=OFk6jz0>1iv0q(J`em8JU!=s0REWsgj7$xe=Bl)ICviRJm5vyYl5F)ZwTI#y$yJ8 z_Ripg*!zGFXO9PejeP=m0{aZ`Y3%QTzsUvni9u1zvUI2UtdnNEa?DfD; zur~wOd3u9i;rKVf|7M>HuJe2Vev9KbgS)H!?cV{e^BiCgrm%n?>U})}@!2@fb?{Q` z_rZ1l8K~_i)$>Gsy(JvHF6YS!uCM151%HO)D}d|wtqrc9R{;Njy)O7w_RiqHvG)Q0gFPPn0sBPo0N3*(@aH*x zC3p??P2hFelfWCX9|v#EehqvU`)%;S><__p{;+yM-b44#V>mt%Jf6J(_(=Bh;Cg#& zgX`^W0scMbX$P+3yMgQS_XkhnJR`w%d8UDH;rO}WdV80G>+_9`;2Sv4PHcn8i?5nSh~13rY~n}O?otUdTh zj_(FOk-Z=IH1^@(^VlbX>;7j3cp}Ho2Vcp)0(>3&W^i2(yTNroe*j$XuOGp6{agUo z^>Yhc*Yg8#JubKnQn!cwT>dQJKd|Qk*Y#N({AZ3Y4}Oll4!EwLX5hMh+Jo!*=?1Rr zrysc9-VxxBxjYHrS=RdXG7~(KeF1nh`%3UU?AyTev+oAi^^gRv>;D+IuAj5ux*o2B z>v8!n@LF7+C*bwi(>F}rP8zdEg6sYvKX?<4F9EK%w-UJC-n!s=dz*vn_V7IT%ly9G z!S(hI0Pn@|Bf;$Mp2+?cxE}Yv17E}O=fO9z z-vZbB<#@TDAI8hkl>b#T4Cjlgw#YXh#^TPJW`o;Yw_ zKZC(_I~)V9kE1uh^>H*0{0rW$L~y-bAA#%b`UG5W*B9V=yS@e2Jy-*Ym^{-~~8;d+;f<{rBw#UY+Cn zfj3|u!5&Qi-SJa+U#CF)qiy~VXB)1Tim%Mz``d=A^=A6INCSte7|r%ez)N&en6t{NrtQVZJB)k)^HWCua}-QT*WWV?8pCXxQf^Jr>+{V z;xlFO<8K(Q;`M#2dxop{fgJz9a22obXQgTC=SxrDRQzF%4>erH>-$_;!P9=`|Np#( zt30J5d@o?Q%A@ZSl{Q?(>qj}mReXg{{h!nVug~7ZaFr)#z>jZXxXPoiC%j;|ivO77 zI~lIxn{xg*!&UtBH1vfYuNbc4_5HG8hO79mT@@V^G|F%l|19U9Y`BWgAEKgzf~Fd- z;yZHuJi}G|ERLUVxQg$_@yiWY@mbQ+7kaERT*VLI_|1l^_{$u>&2SZ8kI&Qg8m{7> z4W%#i_{wk<{~G82&Tth!o!iMV!&Uqwjz4R-iq92EU+8hsa25Xs$KNts#c$*IKMhy$ zvpN2e;VM2$cKV_o&HQibxKQznIX;8oDt-dTXEI#Huj2TehO78M4*EimyoRgztsGz6 za24N$<4YT^;*qGOUO)EGa8>?9^?%f(x&JLaeN%b%bA4tuT*YTr6-$q3 z!&Q0q=JhzJ0C;ph-^&>8)f?xjYPiZXjN|KpA7O6>UOL9l|AOHv|7_0R&2W|fO^)vi zevy3$c)k4epXf0fd@=iE@CWR33|Hm(p3Aeqa8;i61yuH+pyl8j*gpafE9l364BnT0 zH~81=2Mzc3Bae4S4Oiv)|LD3CaGT2S58wxxr)$Vi$eh_FQ$klVWez1%M1*h+nPtwD zOc^uWOd(TlLZXt)MTR0#h~odQv%brJ`99BYKaX>r&;8!@uKn(P&OLjd;pQu- z^^cMdf}bHj0>4CFzL3_rPCgZWm;4euRek+A*$<_kx`p+6Ci3TstLK5s^d<}c=BHM# zLiwerQ;+-zycv1AN3~8H@;G=`xQ)9F<4$$?=zflQp6guJYc%RCCO-~eMP8+d_VXe6 zZ1|_nqx(O`-Q!%w{R{a+@`msml+(*Ig)_k84;N@(3;$bW#pMP457Gnqv` z6`nwT7`}r1alFrAJ^3#9PPlECb=WS~U0&8J2FFKtoXdK>g6*5KQMeKo+m1WoG30si zy6~LjL*V(ze}tEIUOJ4^82waqF8!3NBwd8#a`H*=y5#n{>SxL8Jg#+GkuQOFB#+?r zo!!aL;Pr@u;5N_OFwgTTZ?CUiMm`z!*OF&K{g228z<0xK+`}06B;{)&|2yS>Lq2I^ zoe#NMI{cf0`A_3q=07`LcbJ7d9-fPQF}x6YQoMey6nR_t6V9cd1L&uQbLq!k=U1OR z3to@aoV*siE%{P-XL5V}Ry=uayzXZp`3m?*^2g#rvtgMEx9!z2t@`_vUmB;rk^D#a zc5-|D%0A~ZZ!yWW&iBq`-bPnfKS6#RevZ7#Q<}d*J{$fI`Csr9P4wq%ziNzrGB}rh z8rRTVcJdYQyyU5#)_hU&j_|VNiSQ@LbJf&3Pm`~zrQQT?+iNDaS6|8xK%JrF@5A39 zuYvlL$@|0SIgj2RF>lM^*3UfjvxD*nkpJAd%(Fc&@(p>V+Pc0!l6QljCf@_UNM5*( z*16$4x*w)czw2E38Hs$VXZ8ECpNQLe)lB3W>T2#G^6u~g?|XIF~x7 zP-lsAsZ#`XR+G%KBpCvy4??|3Dz2^Io*N2ZI{|&y3JW~d(^AY(o@LlAm;QPt5XVf}B!eupM z!@v5g)X$K=0KZCZpVxYa+@23j^PJYR`u4nMHu4^*Ux2(XJeGZ`)~!N58u_~96X4I0 zTmLVS+w07GlFvt-A>>wP9QkJCXOJht7n56^wd6LRTgh!czaY2yJVbsJX8qJw;`{CIs?gD!>5w>gzqGu1V2Z< z8lL`z`{&^ocvbSF@H*t*!ds9R#(K>nPX+&&ybJs&c?=k}$!EgBY0HLmi{pVh~Pgv%-ysYmPtnUKnvc8Gv=RNXN823Y} zKVFK5jSHh zKcArE)h6!_f0o={zt@J`UN`s(c`MZE3zzxFDYodqBPstZ=Kn3{GM@u6Z_}L1{MdRe zAiwvzN9R%}A08*IaV~YN|1HiX|2`gP>~Jo5o1Z<-C0`P^!~M=BZ}aw(bIET&{)BVM z+v^@LI+y&5*l#X7m%P31@s@MRuR#8ebIIH59@D%Su7t(zXKa7X;9T- zo5#82?e&etoJ)Qz@}-_58=Xr&LwiX_BCVWD z-d?ZR*}3GqBHzuqf8IXc2k`>sPlu%mkt(>JIkZarT%jr^aoBlm->HTeSdQ< zbrMkLigT%R3w{3OT^X;H0{Ebu!u{Y|4=7e zyKp5emfzG-uRqjIzgj-+cD-KMxzxXkd@<)z-~P@^1?Q4~rBk>FOXYUaFZcSf*RR%c zF8PC=$Cu-ZGY8iO^)Z1OFOs>l=&n zy?>GqhsWUdZTmyzSG9gl@@uG{pFB->%@-$c0PxX=H+2YkF!;^%oGUTb`>K~G)l|Webk(Yq~O@0I(!R=VCO8vj! znaQVPKP*6g9owZmc}4UYM_vo(=bt5i6W*1)DvpME_bJ-uB!FJ5!T=Mq#r=bTG^@W5~pmfxI9 z-d^W_!@1-yB7fVtvF7=ZPmUMW3gLBE-@6AV@ zOMVFQ#hpvu-WO2Ox#XW25-!5>gmcN;`wnV5m;5s1>p7SFppU{uSe|z-`OZV59BJiT z^7cN9&dw#j3;Ax&C2#Lj=@-Rt<_m?=A{6l!0Gt0T; zBO~M@5_!kDeooZ?*SXZU_cf$?Ia~>g?f;9A zPv>0n_P&N3>yzJxzW}%2Q)QEB{bA(G zld3NvUjyF>mwAx>979C=2pS1a-n zsMCr3P2?w&XL&&TpG%%2x%y`Evhe-n4dBpQ5X-hs~$WPZqdLdj^d}FY{6UUEGhAbT0ebyA$1L?x6haUliVJ!CczCe zP3T?vx6hZ(M80XMu5Uhadwf`i+&*8rI{9AId7iun=BFdM9Vf;+m-)XmLHp_JT>7{D zdAM`Qx0`C|?itlfJ4yXZdq_HIfr9+g-+u{!$8G@;jGt>tfvE9yS{2B5+@Jr-HXKVfI$xp*mb=RMh{Yu8II!CW(BA)|)h+&+s@tEhu&PxXW4s}+MmwZS2`H=ig zxSh|oc{>mP+T~^3br|=M^OC`zo~QMXkd)_asMyGZjJol8H%(a$#L($6B~cavvWtabL2 zkAxp4zY0G^{?ZbybAkLI{3`iV`2BvHyvk0kld7kFm3ff$I)L@cj#yc+o*@cPb6OX(P`-`u(MnH7&)+LCvNcP8Hpk0&p(L+cN9UOG@5 z#vS8a#vP6PTja;#v&gG_qV*HVXTw*JpMb9?k4w}#Tgmsp_rUFTR|DsNj#9oS_J=#p zONY|KvA!wdbsW3B*ys6YB>w@&WjV;pFV~;XM?Mu^jQkS3qI2mdF-Ge=>0IW&?h5rf zq~)JMW?{wL!1=2FV{LY+0_OW>Qy3!{D_ z`6T#0xQ+WB#yv;*mdO7_`HzuLgXiUByUYAXGU<9{b}sW@Vzv6ir^1`1Fzv+`iaY=`FhT!pKp+FMqXsC=G&0Bf_Ea{0`EzlZJpK`K;9ZYf_w*j0(qSe zw9Xv3ZLcyof4hP5Tae#I9$Bw-c9XY+fA3u8ZFnZlA9pVEmScnZujIYpe~=%5-y|=w zQR^h>tzTvTk^1A{8JtT$iJ3H)&AH^yApZz?)ekjagnS;n4EarXW%6b?e^P^d9lSny z9G*ve0dCuCCbriQ%BS0`eU2f268;wXVfZZav>11ZbD6hDX05*tZvFg(emoMd#;W^0{!Sjmn)8uvF*U0U8pX7bDVVj3EDfD_q=eVgyzmXqq z+kNRy%@-&C4PK7C=BJvk?p)^i6z2IE=Q7Vv@6vp0xb!LgR9B94r~E+FA58hx$WJCO z51->4twg`Git6`AKbt9E26a9q$F$#jy@~Xn1zGv>ldB&au78R9vGe419{4)Bo$r0% zH7zRJMe5jj-OS{6{x&bUou@5DZs%jGlH2*%`s8*#wiUUZkL^ls=VJ$w+xggW{eQkdz=Unpjc5A+pbIIF&^0f14{m(UD$GP8snmLzzx-T@}!nx#a zzv}2*@`I6o#ku5df9va9@=Lx97hxITT=KRbjw84Ia5lN^hs()rKm3T?_QNm9Z9n{x z-1fusEva;3f~ONJo1;}E1XOH zIMiS7T}=1{x6h2hx{#sNOkoqya3J>y*J??S#QdFg#xr#1Ov_{-#3 z_G`We`6&2c=h9C*^fSu2^m7gQH_7XNqxENyzYkwPp7Ma^-y`n;-{@TWNkBi_oJ&8S zAitYD$G2L4KY4%nVe&)pQ{<%&YMl$@6X93M&%tk#|8-dFq#CGSZ9h+r$Df7aw*S;P zq`C6s{o&QfSHf$PpMW=m+qn5LuDuRa#+7+Kg?S!Lb@G3w{Y)Ys44+B<6MP|gh3~b_ zD(5n8-Urn;I+yJ`4f*ZlzrjBzf940R^9}hj_>bhj!%vgv#rCq-z1nse3IE6CrT=#5 zKj|PH-|`K9)az-<*TS=sr#hnf+~ghM#o)FbSKv6}>Hp!aU7hId2z_>RF7up-`rXM( z{G|Q#BTs-2Bab<%`ElgK;WL~|KUdJteCN{7737zZw?3xz*ODKAe?%U4T=P50*TMIY z=RKkML*!H7$H-s1rTGiaWxe9Esb6(2>lHbvew(}&`~m#pv;F5SczW_r;n~R3oYMM_ zkXMD5bS{0yqt6P?rOyV}wa$~|%iwj$li$#M6Y}=(w$5eTbr`pka~XF#@;%A3-PHO6 z$X|nxApaIVfjs*^T4y@>K=?fJWVbZ`KHP41BXPXHjq*p4-%Y+8e%g6-|HnLBa4z%k z^(h_qDtW=v>bJ>9!5O%aK1!`P9j@{w0@>-X1ake><1?AB6S2Lw*RJa;Vm`?VbV;h-1iKhUX;T2`}tC zdOJlwrJPGYxzFo(70LU-yoFspmm-l?+9;2z7pP%Jl#dD)17=Kd%^TK_BZmGFb)sV`~%DEZ6qGvqtre>#ue zu5)Oef1FD{xi70HeO&*}3$81^rxfF8wsRrsG~CUk?A5{3ty6F#S2(Pb&YV*E5jMgl8u| z2G2`g?QgA9l>8{X65Qs$;RBj~(dA`*V{@v%;#}5u%qjK0RHwOeWEiH-VoZ9|*rf9+N^>;1*oAOKkYJZ>@UD;ri9wUQeEd+|DmO zLT;}oFF}4D^&cmnx{4Ww|Haz;}-g&lboAi1+=d!&f-d6AET-NK!8S3%Q zB_H#zdSB;~xAS!)$nE^wBwPYb;o$qBdH z`wrB9l=7b;U(MxZ+$k8hwsRSG8^&!+UgWM8YU5n$oI;&W&ZW+5YqY>7J2<7NuocHK>iVY1$mLAnqN;o8~%xN>1R0l`NFyMlPa0k zIY8bXeuR7r{AcoP4``j=$a}+YI+uPD(NAP#bhYp8pZk$dP5x+dt)H2EIQ(JqWAK9H zl~QP(lH_m0E0AA-KS};4KH#7}T&l|bQZp?d=}P(fDfJrz$%n&7l5c=dBtHkA4YzT7 zV%$$$UgkOSuv~=a8=cE`FOD}LeM>$X{uB9e_%Gy-r`Cb5IG1tbFz!v~GVToIlZ*;i z!eaLWm*Hv1Yp2orS;!Z|bCF+w7b4G%?Ny3=7`&?U=OP||O{{!-(8ML1*DDH>{@3W`6BpK@;mUk zYpX=2fqrpac^MUbZ>+v!eZOK2J$)K zmQS5jbM}68$wzN@nE#4Y=fQ_`fH?9V@Veyh!k;C-1#dpWqQup}L;Uu}Q*8~L>44fAT9tmN;(bCV~_r}@Il|)t)HT}pZ|^W_IFpWIhT2U8te5h`FwctaUm2I z+fNR_GmsZ8tm~DXdm=%P9tBQyz--3zZ!XWcy02};f=}j7tuN| zkiPJe`DEku=dAw`@CV8BCfD2}&T*jb?Dmuu2b_3%%Yp_DI+{6xyH)_7zgd3pE>=QyPj{mwS39~-Ovd_nm# zsB@6K5B!*`Bj>@AuG4RvCy#+&BhL=ML!JkodVqRpe~T=M&nf77|-TQ<=8Q=Ciw81nO+ zOa4pb6P!!_BJ!)8Oa4G(t-sE>f7t3b2*p%WaRTYmwa~AFX3GBhmntUE_r)iriydPmuaj0#5tFI9@MYzT=L`E zX}+;@$v=vGYv+<**-`WDoJ-zb|Nkoa7StKwTpm9p;PJyy=Tbj?XRSZNxzzvZqi_+H zNzSEC-n^pWJc@Iv^LAIQGt;@$DTRI(IhXtu@yuE&Yy>rR8?WXlNIhVY>ZvRu~ zlJEPf=0A5X`Bh89MOY3xm-SkgS2S#Y=Thek>Kt`0bt+)J&N-KSiS9b?Z_XuO5BVF; zW!y+UxrjvmbuM*k_Rub>dJblXI!F0R24ZT>5E&e)2h&{JR*p zkaNj*MZS!4$)7{MymQI-LcY3l$(QV@>s8aaE{&2UEy5%--Z4^bT0YW{NW-jTb!2+ z*Kc7Sb~u+hlTc@mbIC7_*Y(=(T=FxJ|H--Jll0R33Fneufc!=0k}ug?^Ov1Vekt;| zoJ)Qf@^_p|ehum(?pF{t7olE^exF0J6m#*dU{IlVo zELF%mC`W3O?}fiWejVP8{8^k2=|}!Lj$22N{{o**o&v|4o5-JqA0hu5{x5mo6x!$` zll803!*2Lfxcxmq zTdz3Tk-{>R@{8dKeiwNc_^;%9;r939Y~0f6v`&es`qjK}dcFP}`Lpm>$eU-- z{9N*$@KxlO;m66dWYju;kQamBBCiflKJEVgYsKjG^5nn5Unb9$N%IrP?Q;*_BVUR9 zXXL9gYn>m+7iUpVJ6*rpJnw@)Nq!67i99x|{``FM7vbNMPk|?Y`~Gpa!%L9=4sT38 z`a%8qQRKhCXONeYldNIcN?sGbk9-RJHu?APqBFFf&0A)??zAC!9J~*CKlm89-EWs$ zr*)^1H-axDx8ub3$?f=VGkH7I`HcJ(_yO{P@T24fasPOZdnQi*7x6O_-5^K}=U%j1V*_ISp5Y;fB@ zZ#kFzuYF{s@cHr1C2z-NX=X*g9eq3_`L%sDpTW80?flO}&L#iMYnspFT=Mq5>|)L( ze-`;t&LwZ}%dYHP^3V6v`qi9E-rkqpklfyv-Im0&+XP zTSIQgaXZNE{OW#kJFYxIZs+$dliPW=JLGnrAzaSvx#aEdfJ|^M`GWZ1?6;gt z{((=zMOfxKm;C$4FK{mTEXc2PF8SQUwVyT4C7&DlEzTvMX@ur?IG223xxzz83{KMpZ;g33(J`0V~^)2pP z>f}Km6`f0d1oBTfm%RPnukBp&*+y&qdd?;P2Kss4x#V{v-^#h|FAl$7?@ZolAZ->VM%}^2a7>{%hxwx5qh$olAc7o0>oBJlYQ)FP(EP z`4W>f|C@8k+uu#N;au`BB7fVtmSA zTcUn{a(n(|6#3Wae>z;cmd97yaQwU4B2V&1k=z9Ek550ih6p`4LpS`fZT_oQFzu{c!#Gy_E`-RO<(WyFcYVwir%;aa_ zk2sh5!%@G8bLlf~n$|BvJ_lZz{5HG>`Sa7YPJQwX@E4p*KZ)q4y>sa&mjg4S6@ zz7+l;d6IWEzk|FD{0s7t%QXKTT&~IOZUD~rUZwoUsFP%&uD9JDFTvB0=Ut@rb2yLQ zjxcZeoXfm5L%taKYWQR185e8)D&*bZb)83VM;Nz>a~bywMll^-$wqh z%SUftnE#W`Wq;_3^*v9%3;rkhb@(mv7OQo=lD!*>hQ+q;MtF?#=uTRKSq8BUWL5n+9c8bYLX|w8OvWol|d>dS@ z%6XV`?@2nme$%ns$V3zR0)4q+2y59`-xiT2Kn3Y@)vPl zs|Wep@R8&@;q%F}WYxYuAa4l&%z18&MlTP-ZGV1Zvwri0bJ>4ZAJF~hXXmm%+w-26 zolCyqLCs%vE_r+2^Nw@LuR%WPvT!9V){i~!nZdc_(;U+JnVn00d)_mTbIEr?KEHFx z+w-2KoJ;;w^8~p)?|GTrp7*@vT;?;~Hr-x#oXdQ6PY4%bNsIeM+wS%}RCec5 zr}B2K^RRQNW6wjCA-CtDsydfCcXnu<>dvK(ohNVLT=MM_HQ&U!WLC2xO^zPoeD|A%}p=aRSQd51ce{NUYMe}r?%+w;7WoJ;=l7n+~yT=Moj?|kQy zAOEH1-*ql|d!Bc-^Jx9AH2;Bf$=mb1+nr0k{2tBkbS`;&o_C*f$v?4I^WQp`ygko* z+_~iY?bG~e=aRSQc`rGa{EPcF|EF`w+w;8tIhXu7_z92pL9&~mz_)Ao}aztT=M6RYyOUN$=maxX;y?QVUhh` z@|#X*K7;dU{}Ut?UQ_K{^65`&K96(B+w-}_oJ;=*}3HBBVWzAee{82nUJVQPf`AjSI=WN`aT0W8=E^WwhVr&u3J?dQgc{o$j=r@Wxm-)HAO7m5m zOPzM8Q`5QBc?Ij$ko-G%E9X*Y9qM#+E_LesqASpyd?UOcd5JTcALU%?M~cctcwd@x zsXq_-8RV(XYMlk-!{P6dUxBY9Z}+R#+3sBWX^eh$JC}YAAitly=sB%(n0zAq6!|&$ z1@ao_wa#_t($5t1bH};#vk>`|?}sa4NfZ8w--O4Ix4fYBbCPd@=O@p6QS-&gd%(+) z?}1k(KmLc-c?K@mX`Rc?W!#uz;UX;8oy)ibkiSd*Ej$%&_qN?1yR7vy zkxzy{ME*Uz0C{R`uM*_l;7>S@-d@oE)6S*;3RkqB2IRBh&yoKLf04YwpIYZtxLlL{ zrzy@4yzxJLfvXd}9ih)<&ZW;4sK1sx=~W%~Bl3>$o#ct|J>?A*R@W2@=oxc&ZD=N;#z-z^OAw)B0qxs8hiqI^BX$ubn*}23C^SY zImTV?ykradJM{gJCr-O6pXAknP zk{9?->%T@m2L3wvY4}+3s&}-`6!JOnIpjkl`gm*^Tz*>SIUDBrE6V?kItR&%+|_Z9 zlCOlHAg0f1z8>{IA2fPm-rj zqVrIPyb8Pt`2u)L@>}rE&P#`J8>63|&ZVE{lIpkv$k)P0kpB#yK>lT`_Y=0<_ zLie*C$^MZ%&>X9|+i% z{AGA&@}2N_@+N6@+@WyWUe~d`5-6WLjpkR7H-@h#KM&tZo(toC>0IV5MkXmN-@&b) z${Ez{{a$u|9*6u@S4U_x>fa_m4u9YSt!Mj5Ogde!^yIza*~s_93pkhlhohh3&V`Dl z*ZSqiN5QL-Z-Un%&yhjvG$QW{Z$Z8V-kv;HMy=D8d>VY9b6KxMtk($VLJ!1foeAWf z;M2)Jg)f8K_WdqxC>EAIE-&LoO36hyKkZz`jXxtNHsW^?F_MQK{AK@2gvWIlL?KvcJWKfA)OtIC6X5b`I75{sFDO(&c3y zy5KzC2J(6Eoz7)G8)H8AIF~yA;QZ<#@*3akd>$kJ9DW{d>swFTjNB$~2T#92|6_Uk z`%}fqvtXVZledSrBCn3~PVwZ;;DgC?W4pXTUPm@iSXPp6$NkTK^1K-}f0ev5JljV7 zzOC-|+*=W=_r z=a;)WmweJJn(yIU^7j1lAm@^=hy3f#C2!9!PjD{zw~>F#x#aEn<+;u!e-!xz&LwZp zFRyei`HES!|257fZ_h99Ah+k2_mkW6%O}X~`Q^*x_Wbf4a(jL`!=}(gSZsUQ^UHb2 z?fKHFA4?xgohdzucDGo?q@kZqF}|Cb##`PH`^t+yUpS-*ztZ+&v*&geAeb zqCI0~S+l|g8Z_j5XI+uJsM?NjNjhl^p0Olbd`3QIk@(J*Y zj-FbSAg;?L%(!JdE77`$Te^hgsw{4~xldKG%}l_S#B5 z2mOCRz8HRp+~(~h`BBWzdGgh$bDiAgC+Wv}JFxk;`LX9S&24@jqP)#dVRBpF$H@1h zpC`zzpIYSKV!fJ>Tc54Tt)I^1yQk=S_9m~oQhg}7-OrCBuYrE1lh;C>h2-b4zRSsN zeK(NXcHcp6>-!bCZI|!J+oPXTukPn3CAy0zijpF1s z4;9F*|LWv+yQ@!b_dm~*+wJ8g@_Fy;`gA9^{bvCALgYu2KZ5m|N^a{lkKDH7d*rqq z*OOa6+sSPnz9hHX-68TP@O$S3xy{c-@@iPG8|1cLNw?m=KiGPuC%5&=L2m0+fZX~o zP2L{;R3*25>XKVO&B?8w_T<)2cXI1z5czQQGnU-?nMQ8=^L%pKj?2kyf8IcD+iM5; z@3`H4Mg9l;J91m!Q{)S61*JSW?B|Nda}oPpfN%}H+aP>|f_zcjh+&y~q- zerl0#$9gp-xAkgEZtK;B+}5ivxvkeQa_fI0`6=`>hx||YQu5y?>->H|{txoo$&=uG z$5-V4;(qLV^0YWF@H2S^_$~5(Q9s%C`?q^)ct-L<@Q2Ck!XG6c2!D(`KYoutNj@F< zdgN>2&y(+kcOb8T`aQ`@z=xA(L!G7M<=~0rZQ=I$-)X}1#fE<);b$mc4)6E4LOvAv z^gHgK{{(mr@*VI3paYs9sI*~-V2+v13m;7gSH2=19$tOt zKe|eNopU*kUWeo8kDW{XF4?sHr{w+6r+t2{><^M3kK^bcU0&*+LjBXuCI2bv+v~Ee zP9o}Gqx|=%|1WuN)Jctbl{zwRj9i2z8+knZ5$DoR`&_!dMaU1-R4)&={jFiNdL&Yd z^4~qI`9|cqQNK0S8H75cTwYo{fIi=JE`6Rtof+gW=GJi+ke`RYNB(La&2MxrL&ipT zx^OaNAGLrjA6H=l+NHfLou5=yNc6Y?)}8 z$SCKsU2;^^{@)~@1)l@Aem<1{gk?oy^vk_@$X7t?tSA2%zLorU_?OOQ|4Bff-@$p@ zidg)m&lL9yOFo9s`!`$0{>K4&_M)G~|9ORj6YrYUXNhp^;{KGUvYEZsOQO&n? zF6-M4>)YA6tnXapUt(>epm7r{r87cQ>($+SoEKTbXmUdws(c8z`-IhTGOuC8@j zkk5s;C*KF}O8(qaTBi^B_wXU)rD|w?40*Dr)!!l?37g;y>RjfnP(9sVIh;%0UN2G5x#VXcU&OiO?ez@h zoJ;;sk5`QmvM7HqwBTYxs2OAAzXxIqjSl3K>j1=lCQo}(&2oAbIGqn z{!8bQx7QDR=UnoCBLAav$=i97GtMPnzk&9D-nr!M^#gyA+v^7+UxZLtY(KQ~JTcDY zb{&V?bx!9p?t2(FKlxF3aq@6hs*fYL^TThG+j-yw@*X%}w3@sy#@$42<9*psPi(p<%huKex{I? zh+a;h{963}o#tHb-=4z#)lBDdziNFhaxVFE$S-p)`3#BSA}pJn%l&FR?pHr?E_LD> z>HXwh=aOHC{P)f!zY6)Eol8EZVz>y)Z_XvZwW-$si#$hT^(1?uKX&i9FCKN$IF~w? zQ6~%eIMm5S{x7@``Q2tZZdvEj{{f8qBzdHg_E*Qb^z&*HtbI_^mFv8X?hdY3y9;{D66G1Gj#D4BwMw;Q#Phu8!27g8B*0rG9Db|0~E} zgKwhxDKHO*$lt{L-ymNoO@<}wUj1tQZ$_Pp`J5<`4Eg-ojecDhctEm zs16mqY!8?Dk^AjL{9fqpykzj%9d&?S&LwZhWka1ye(=khAK_f`_B!@S&L#gD@>88l z-d@K(-?`)~b<+CpI+wg1_pNp=`4Px};9T-{+_&AidmVcwa(f+nK5}~ zezm)EnIHQcuz}7czy5jMUPGNr-aZFxymQIdX`%T^&LwZ312)IGzumdy?Q_7saxVEYZ8X2nx#aD0z>YYVe51CSKki)e z_Bmh|oJ+pXi<-aWT=MogVE;Im{0-#)b1r%N9I({igezf@{ZR75+G+jt&LwZ31NIQP zeXdtw=ThfFd#zKs{tJmwcKo+RuFFlDE$pTj5;t zle=nuwR6ead6kcyOTJk*&2M)udHbBPubfN1_^X=V=Unpkxn4({Oa2n_$DK>wKG*Al zbIEV*uJtcDm%N?l`Nz5BC->0&f6gUupX-(SK)4bX+i#op)O>p9lDE(G%1LgYCsxS0 zjGI4R>lAe^b?on5mUk}s*}XOYxO2(d=Y7?5F8Ne_G+)=bL3&_9VT=MpL zUoShC{9DL(aV~lLysy`sOFm;??Ps8K$=m08jUl(!(@!P0&j))KE)Qem@y5l};UX+s zU0%lh0)2i(`QKAS?UkZ*wRadl!t z)aKzlxy{=@ROd^X*s$b2s9&xBau4YBQgFLHX2tEdB6)3iP3JQIah0`BL+3L8Q*l4} zJoyoLJM!ANpL`W=eGbRt;R)mqVV*aUcY*IDe=()@xtF{+=J_!B%h>;KlP6EBbsjvV zU#-u1@W;uMrPEv+^1AR5#36_-^ta;77>QWYB(ohuiJ06V6lJbonA0 zjb5hsPOn)0CmeTVc3v_>;`{0CE}L`NZ=al@KcC;ZVYoBHdxeVj|)p6?ju zT=F*uXnvG)$=mVTWapAk7^wN_&LwY;D;7GJe49ai2Xm`Gd&!aW45S$PaTa`KQKe{ZY;(Z?EH=OkQPd_-0rZ!sUKg?yn{ZhGio;4x=JR zTpbyAA^JQ=`O#7^EH^3t4*E>>gMQzBZ|;X@b1uIhjhB_Elf{f~1l`9UAaH^cMx&ZF~;apyRfI**~weCJZ9Xkxes z%L?a`?}Yqn=aQdNj#Ob!`4yIhXvKlXN~`bS`_jK;(XRve0pFw_@bIIHG zn&@2e6((!_$<8Hj+v^>2oB#Km%lyPu2^V2mLvd z-H)Zm6D79a;&3pMgS>J08Ci;v*VSo=R3XR1w@5?s-;wV}o)O0>3&_jDKPP_yet~=l zJlzrP*Vd~Dj@QbQSB2Lm&xzyH7sz+OUnie{iuOFOC-hQwB>|F9G zXKVgf=aRSM<*Uvm{~GewolD-1my@0dSHfbCb85}e`YD`CzI%eC!t)HyrGC}9n$PB3 z@^-wO-?`+!eMj?!olD-1m&-bre7pIYui#wrcD($QbIEsIp!r(PC2z;e&pMZU>IBU{ z=Uno3y!?`L$!~a9^PQYa-j0`hJC}UMMVjyDT=I6jJkq)3yCMIEbIIHB@-*j?AGk#8 z&vY(%J6>MoT=M6UU*=r$cKo~Ex#Vjv)B2m7OWuyJKXoqo$;f~1T=I6je9*b%ZzKPM zbIF%U3>RVf*}3E+%e9|holE|wkK~)-b7Y-MKFJErUw1BfJ04GZQhw_H_y0D?r*JO$ z+=-G3`#-rIkLQQW?@hTsoG;<9R3tAefv~i8b)?VzSg)>>x7TkBru-)KIg$JVe2(+d zq5hRBGHQ4pnCh3r=h1maKewGr9Xno2c`959i`^eSwo3a?dn(HJ z&X3vgLU!je?g5OO%ejo(33c*1mvM_GhKsP2I2HYJZ`?V^$2yn19S>Gl{c^8<1-t;Lv2)2UMZUFjsow?pcFrYl$9Jzfm;5~Bm_P+wtIJ zxZRF!;&JjCmzVnQt<&xDk#m{-6+4lX)x#Sxozu&pkANzsUKj>Wg zxA{NeT=HetYyM~FlDGN4>|FBMHfa8;b3Z?KoJ+p+M$IQZ9j=7M9$(q^%HUk`BaqMR zT_hFRoO7vfw~LzaB*BV?fA)C3qsvR3e=!d|oy)ja zFm7MxlHayg#~t8Y#y-Xc-!G$Zedd^_@&knaVz^?h8+M23(zfxkumHGCQQ0r&^x7vOuy$0yZq z93#IDzf8Uwzu#ki(Vw&azlN73zW{GW{vgh`^dhefe~Uad&bMqP&kz5KJQdEv93@{3 zPjcq|{@+Nc*DI0Rd7Ed*%i%oCF!BdeYn^rEGi3)3%Q5n+@N?u1(rP}_M&DoBVC~81f|9G(VfXCj5Q!5%3-4yW!uG zC&{k$k2)`=6urCvmzz~=_?H65aeq6P`}q;y=^flZ&LwZJ6HbmhOsOOJRj?ukT36C@-2>P{&DA$pM`u)=aPTn zxaR9RmwW>9&7DjBz)8)&;9T-6k$>5_7}EUyuB2&Lv+N`GL+QzYX~@&L!Uy z`SH#rfA4&qbII4m9XtP)*}07SBl6jtOWw}E<##Um#6+!M*tz8G{99S)l5e_G^A(&+-p;>04n&04D@{i(i>?h78|G>AJ z-{oBLc3$oq=aNrxNb`rBOFjkapL8zyYsmlNT=ILDhKsQL;au{SasPbHx#aEh0q#1N z{FtA$pJcylV@};`Hzs#;#~4Q62nDU9wE2$fyJGd4!L$XzKeA(^^>2` ze#$wQ`gU9y=Unn-&T9T?=aRSM%Er!R+*260xpS$r6XU+%T~Eu;OFy=s&vY*J6H#ZObE#A27oCUYCDU9%@<$#}uRv~p$Eq#) zyU4#mz7@WP{4)Go@`sb_xIdF$ho`-K|9Z7Zsn<)9+xs$_kUx`3^L@!5O07PN{6+W{ z@*m*G$#cmKS(ZQai_QOZcmeVw@LJ@J)9TN6A)gC>le|zm&95b21V2cgHNEElCVvB- z-rvvr@M`3T;JwLj!BXG{{Z=a$Zgydf9W{Z=hw(*CAZH@$xFU&vHpBX@?TM>GP!*Y zOf7Qz9GIqXx&JAyrK6YaDW4bTXSz5q8IrB>IH$XFnSWc~fzBoWHS$B9OWyh%?_BaN zuj%j8NzNtTU`n_M%N*yD-;ex!=aT<)nxw9eP^f{XR6nv6%>A%_UI>1cwMEGLoQa^8va1oYO&ZSPSOIqhc z@^SDT=Nr^%R7IV;&ZSNw@~N(eD`Am&lYGHHblgnj zL*WmR?}8T~UxjgFoy)k9r{yAijEi#_H|-T2_bKv@@OtDc;mye7F>V|3tH^hS+kV(U z{u7q|E-!t?q0iyYrO&B%nJ{ABHc1+qnB=(6DSFw|>r0oxiT?xPMZk1 zL+jc8ACLYsIG6j44Y*&*1Gj#XqE6-i;VoPpnV$sIZ|_{@Ck^`S;au_uknitY@{N%n zPCgSp32uEBL!T?jE5Q$t&x4<*`j6s%`0xLb&vG*~7Z#h(NKL(-%enMl1NYB`oXh&g zB45n8*k`+vR2Uq$|P z@&WLPs zx7Ya>BTs>R9QjVvA3^^1R;@ptd?CNBbiiF_x$d=N0l(@SEf|KQVaxX!}EFtXB?lTi?9ow!THkZGB_OZGG)=y?k5te_P+i zl(&9bkXt|P$gQ7O$gQ7va_eURx%D%J-1?bKZv7;XTR+Rmt)F$|*3U=e*3SX*`Pg1R zl3PEg$gTc)@@3c$uaMj4;oKx2kNb@n+-~ICvK_6T9OTwdUUKWF2)XqWOK$yCBDa1T zlkdm;v>?9(Z%1zZyh8pi<|m%q`WZmp1@kk7-1?bKZv7;XTR+Rmt)F$|*3U=e*3SWQ z8}~G zdms3?sxtq7Zkv`AYVQbDN31f)pi=})wAEBfooOd<15*f4Fe;KMZ9*cY9ohuL(#0uB zWUkX_)VdpY(T%S9&F=Em_!Zkw`7@#aQUnYvLhuiS>O#_h1k^VCYrfBO?(@vte42pY z-*0%)x%YjabI#{E|IfL1Zpwgbx)s2`E#*}WT=modS3N1PZ7vJuSdhPbYA_ zPuB&!SMsMDxa#Qvu6lZbtDZjKs%H?m>KOvAdWM0ko)O@xXB@cdnE>g$uMwDSAX}f^)Mp!p$zOb-3s78*7^fn_0#}YJt^R-rvbR?Nds3sEx=VzC-8*i zLl^M%!n=X1o*v+;rx&>D=>x8M27#-dA>gWK7`W;g0j_$+fvcVg;HoDm^JOh}Ete2* z9k0W{HQgw1?T5>NYq}M{b$qV|u6k;KtDY2a)zbi6^`wETo)+M$rxUoof3FMp548RO z?-kwy{4U|Wzz+-W13oT%a0WgEJShGDFmTPE5#U!z`yB_a`7;6h|A>8X?$rKAb%ube zo-lCL69uk%%7Ck$3gD`z8n~ug1H4dwfNQ!9zzg*UxTf0zyik9DFPDD23-}L&cLV>J zoc91%e|mvW$ax>|mGT@;9{4#@PX>VNylWV^>Kp-nx9A@S{)p5Y)usK6u9pL%OZjVJ zUkdyTi8lzmNq7jjz8^IV{NKbr3jBA%%Ya`l=lY&1)tMDu4fYp^etqsq?Jp9Z0{d#= z4ZyDxo&kQVa7|z1&kFAZ`=1N%0)9|J72zYme=d9+_+H@?!1X?Rke#FtoB90>0at&+z}4Rb3=uKsodSATnetG~U#)!#ng z>hB+yPQd0}4z5zc^_z3Xxg$HEato29ZDFv?a1c7TjA>bEC{ADxn3gB8^G2pJm z;{ez4ss^s*RRdhhD+OH3s{y!{R~opMR|{}0uTJ2a4_(03-)`Wp_}c?q{p|&={`LV^ zfAhfA-vQw2?;vpXcL=!pI}ZF}(LVvaR=BxQPsdu{)(J0_^{(=I;X&YE6dnS8qwp~B zKM0QkKP)^3T=UZbuJKd@H;zzTHNa10N9dFGah~$765ay*R^b`o`gd@$z|WNPZs1o* zJUzfQeqG128S9Zh_Yvp=`+t=Eojh>8-!TCES+O4mev$AI;QIHl#)1D$>?eS$zd>0y zsQxlp2Zn%WgolB@B;#ll_-)cZmI42b@Cx9YrG8ff*Y!ya@a=Ocv+0upeu3y|0IoXI zz*T1p@OwpPr;qbgc%jsXF5sUL-VHn@ya#xT&aZ&~Sa=_BOZ?3P|B~~0sfk_qqL9n68CZXpFb_YpY(7b16=#PEO2=&IneFnd}~VQ4?Vya zOaAu)uM?epz;(ZV5V($;L%`n@{lmbue;xr|qV+-6{d~&$pAlXPTy+M4=R|)9_$68& zfairrf$O@a4EO=5Cl$c|TX;2a)n5Z#^{0TV{s!QxKMh>K_8G`p1D=I(`AaM7XJBRL``&>HADd<-V?RU0(-* z|Fe{P2)ODm1Fm{1fUBMuaMj}gS3T9hRZk6Y)sqH(w&X(#@G9XM;HoDJ+>w0f1g?6z zfPYWydx5K-KH#b+4_x&O09QSOz*Wx>aMd#oT+^KZuH_Z5y^c=niKbf$T+1s6T++bR{oTM-e-Cig-wRyz_W@V^gTPh)5OCE$3|#e(0N49rf#B5oqr4RODjBDOz}4Rn zaP>C~T>Xs#SAS!`RgVK)^;82_JvG2pPYSr|X#lQzGQf3w$pZf;nICon*YTwb_{)-? z-N0365Ad%@{m%neJp;g1&meHsGXz}q3I)4VPdP2Ze zkG{7_<5xXVuva}X;Ht*~u6nA0tDYL*swV|p^)vuiJsIFyE?MB(PCJ2Xx?R9^-023c z>GlBEaVHO4^$Y-4J%hki&k%6cGYnkyi~v_Xfs?29KTl}=0e(p94{&{+AO!q~*q6<~ zD}XPQ_80@M{yM8Q`iX3taVd0#`jE z5%7b;dw@Ts;}LMxKLA|y4+2;HL%>!4FmTmB0$lZv16TbMz*T>cD-C_L{;2*CaMd3M zuKJ_EReu?9)n5Tz^~Zp#eh0YfPXV7J^`QZ{>Q4jzh?HXs@GFF8fOiYe0)JR|H*nR{ z16=j=0#`kKz*SEkxat`Iu6l-nFOmEi0e+eAap0yPRw1^&OpJ`7y- zM1iZGGT^GG0=Vjl0arZ^aMhCnuIV-a*YZjO*K}KeYk6gWYr0wBT3+42wSDyf*Y?#5 z{2J-6`haWu$^%!O1Hkn;ghAk{a|pP$$8q4Qe*(Db54?M7{Zaj;z*T<`xato9SN&n& zsy_-`^~Zp#eh0YfuLiFAYk*%T<&vI(w*c4o{A7TuzgghwZzpi|w+p!X+Y4NE_5oKt zdElyN0J!QI1g?69fUBNy;5uGR0Dn^Ew}JOetv@gWK9JrRt1n@OdAM}T3I{(phOG8uZm5w_>;F@j-xQ;tzz*SELaMcq7 zu6i8cs;3&b>Zt*)deXrEp!Em1t~WElb-kGd{#S{o6Zlz@&t1UvK6UR5ybrkUH|BwB z{tN)u{22tU`7;Du^Jg5m>YMtWQ%u&RuMc=T4vj_-}=$f$ROy7U0i{eJ61Jdp%vi@8JeWpKjn!3-1B`U8!%q zz<(pW5BOfGhk4+?7d`-7pT8dluKGuStNwA|s(%8w>JOai`OR)}{;U2{;Hp0eT=j>5 ztNt?Js=orb>W=|e{SI)|UkzOK*8o@jDd4KV0l4bV0AC~ZAq)IR!aIR4)&2+g)xx`h z|5$hraMhm&u6hQ5tDZsNs%Hqe>KO*EdPab&p1}L2)}PxXA4-9D3l9QUJt5$qlY9sR zS3ObS|6A;1z*Ua}T=i4~S3NbrRZj}I>S+M3dNRN@-7Ih|uTJ2aZWnMZuWsO)ZVzxR zuRL%~cL2Dy$3fs5rGFa&uI+Icxau4M{uL>&ap1ofJ^@_YV{p;b`lk9rz*T=3xayAr zSN&zcReuF=)gJ?{`W@h^KLuR%Hvm`tY2d2A1^AbA{xbvb0{%_0?*^{^_5fFZdx5LJ zeZbY#+cMy) zvjX@(iG4M2)l&mp^`wBSo(ABmCkrpkCsaaxVFda z0j_##fUBMqaMjZQT=k@ZtDY9%s;3k9nbOa60oUg|yMf2Vz6baP!t*om0pPk1FbG`z z9RjZY4g*(zM}Vupfzzhe2h~{$T=fKjtDX>W)e{D;dZNHpPYk$@BMxxwXR3i~KUo7j zEc;PuALk`$+;czB0{njA8Q>2H&jQ!`iQPWVQ_ir=8+(9%S$Hq-Zwv1OzDoM5JaBz4 z`T+17<$1wD;I{}L0{$L(zGoQtCgCH%-<12Q-*y;F_Oh!2e6~vjVv0XAJna3lPsKAEuj3b31;pKE2GHw*kWKkYJq~cyQw?18)BsmKDd4K70l4bP0N4H}3tZb#C-9_>kH9}8ychU@lzSiW-)jE` z{4%MZ1HeBgd>Ht5rG1S6*LF7!T=Q)Lxb|;>4^FK=+P{?o*ZwUCT>G~WaP_MUxazL} z{$Ju(47lodfPX^zhic&Zd`}H<^*04v{cQlQ{-%Mezb(N3Q|@1O0$0DffNObm1Akup z>H*#;<54egO}7uY=Kr9N^OF6wd0u%B0T0UW$A*EwPxuJ%u<*bc#rnhXzhBC+6!?R} zgTPzlx$O|}3*>pqFz_!({zQTQLh>gDT=h7>RZlf=)l&mp^`wBSo(ABmCj(sdWPz)m zPT;Di3%Kg(2CjN~fUBN7@J~y*3;gTOWZA>cofav27GiL~@T zdV;`JPYAf`2?JL>QQ)d427HU;j|2Q$!mEL+o*Lk)Ck0&fGyqpU8Q`iX3taVd0#`j< zz*SE-aMjZTT=nFEYyBJm{%dL1gTOW2A>gB0e}HScBf!6<_2e{K^1!uR27vFBdGa7|O?L?R5~&Zvz%|_w;6K#*^P#ErNA;8fS3N=CswV_o^@M?| zo+xnD69c|R^1%Uqv+!!*s;36H>PZ1tJq^HBPX@T^$pTkBoxoL37jV_n4P5o~09QSE z;94#Nz;%2a1g_~00oQ(S7`Uc80$j(_z=x;SAJtO|T=fKjtDX>W)e{D;dZNHpPYn1y zT7Q5)p!Em1{+_A^_~T-q0)C>*(;9&5@1Qa>@GS795>F>^&7Usdnm^sZHGg`5YyRYc ztIh%7s%H?m>KOvAdWM0ko)O@xClH-le@>t6otFatgzzBnONEDke^GdukMowf{@slV z;MOcJ-5BtnYW)FTF6EU1{-(S~paHo49zG5HSF*p<0{nIvA2Yx;-7N4XnLl&_|EBOR z;CqGl0$2Tgz*T=9xauDOuKEXotNtP2s(%=`>K_5F`U8uL^@qz>^_K!y{XyWWKLlL$ zhk>j9C~(zZ23+-509XChz|YnFM&PPH1zhzs0N*0@GY$MADfbrOH)#CgffpdisE?o(5J4Z$rS}Dftry zu6m-tRZkgk)l&gn^;82_JvG2pPYSr|X#lQz(!f83L|)hJmY|5#Xw49JuP40Iqt1XHTs^Ka_k30Y9kq2e|5q0#`j{ zz*SELaMe={T=modS3N1PZ7vJuSdhPbY9KmoDHszIOxHbbEkTN`2@BuIcsx z*YSN2xat`Ku6l-ntDX_ys%IRy>X`tpdV=Rntv{cTd1eUsO5tJP)xx8|uM!@cfjhu& z5<3>TeD3<&ys?;OcJ!@L!632Ds|X0#`kqz*SEdaMjZdT=nz-S3P;)n(hE_tq+61 zHQgcLS|5giYq}%AwLS#SomwB>E$g6C;9nFT1b)pNFMJ627lns`|8%Zr9|gYl1do>i z*Lh0?a2?01fuAMoz8c{A+)E1h8nJHxzFv67$N7?*#ry%e&A8{6gWq zKF+t8WScI~2YmL4UOai=_X!^WzHq*0KMY*s9|5lMj|12ECxC1G!H;_Busf{(67Mt+ z0{*1%Fz~sO4^iO%OL!UZ3#I;40RO!381NqmcYr6QzEuOiah@l%2Ds)=8o2t~0$lyg z09Svrz}4SQ;OcJ|aP_wvxcb`zT>b3@uKxA`SAPeAe_hIP2)Oz?3|##k0j~az16O}1 zfUCdekC>7Mt#9gYX_+TX`Gr!xLE!3d2>2hR+{=J}UHq*8uKvb=tG^C#^|uZ@eSAVm>)!%O5 zTJAl-|4HgeFYtZB`+#33^T|B$YownU0KQrHAn;41{}}>4CVUvU&fi9WpLLQ~9|9kr zTHn;)QsC-u5V-mq0Z@eSAVm>)!$Cw>TehDXQX_)fvdkgz}4S8aP@ZpxcWN?T>TvauKo@KSAR!Th7l)cUFZmI7CQ!@!%R-9>?iWS&q4yiC@u6~J#09s_=da0mD&r2SR{*Y~>D z0N1~Jlmf2rZ*Ksue}^;;{G-yYTY&4|?dk-s`O^hl^QRlQ=1&iB&7WT2nm>KOHGlHJ zHGc+xYyJ!Z*Zdg*uK6Tl`Nsr69(4FXqxL%`MFFmUxZ3S9jy z1Frs70DrHnUt+-3UkAAQn*y%>HUL+D)4#fUCdVz}4R# z;OcK4_&ap}1o(x*2Z3KJd+fe z`WyVD=Ljd~&;Jl`^*0P${fz=wf6IVZieDAL)!!KKYVpefuKrd7SAT1OtG{XBTD~p7 z)!z(o^*0M#{p|#<{&oRZf4hOJzdgX!-(KMAZy#{=cM!PxI|N+)9R_}>l-CIG%Y_Fj zrq&E)Y=1&;7{@tG_aLu1G;F>=bz%_rWfvf%+;Hp0bT=h2qSN&<= zs=o!e>dydI{aN6uzZ zA8jwCz_lI*fonYs0oQT~1K0Ky1+MuJ1Fr4D0j~L64P3{g8sOT`r+{ldGyvCrJ`G&U zr3H9lyaWDMDfcem`gfhWfouFdz`rT|a31(P;RC?W6g~+22f~Md>-!_$S+9kGpDOFADDbtyW5CyozYg$D;nl$Z zOLz_NUkXqAI6ngUv?o8%0{ms+8Q}ja`IZI#6XBh}6YumQ>H>b1@Lu41MQ0!Iha{i# z!1ede1He}Yy>thGe_Qwv@VTOA82HP=M}XIzEE#m3_s#BeetuQvfu+FD*7^fn;|~GX z_{)In`(Y}8YyQN5YyLREHGissYyQ*#*ZfHX|4;F&1-R@)WO zzed(0y}+*%-Uqx>cpkX^{lWp@pRv7i9R{v?Mt~m{o#Vh)$U1rg__e|V%cs_#?+Y&l zuKosrtG^-O>Tejh`Wpp)?>jslG2rU216=*B2EIu0xd!-E!c)LiPXln(lL4;jW`PGK z-#USRNO%`;EthWKpI+eQLl1DR4|(9PNWU}y{9C%;4t$gJCquxs9~k%X#Uy2=^s5uV z^*wlj^NaO|?LQ{{XDRT6@F4Kl7JA`Bz~{fq<7L3xrGKjcexLXo1OB4)lMe7(B;9J@ z7rom{w+8rw!qdQOwEqGA4k?!maE(6;T;uNszDnZh0j~b`0#|?gfUCcQz`G>=A>bPS zF!295#mk=&;Ikw@11r4iTy3~M{7mK*rN9@+^E^S|TcsZe0Z&W22m`-acog{0gqH!| zE4%{ulTuHrfvf%+;P;DPDd4KV0r)q>uQc#O!drl=zZu}_Zx*=v+X-C#?E=0^=Rd&J zuRh?s_u7{N*LD{M{;c#H zQQ((Jx@ExMBlWfd_!T;S0Y5|fF$cKnO!@d(@!1cY; zS>RRD4|D>*UU(PqN#WhV=Sn}&1N_I*fA#`D@jYJo^#T8Z@H}vR|M&p#@{kwLFmTP! z5#XAiH1Kao{4KzrmU^B6uJLDqpDyLw4g5)|&pp7kTzY|jSo-rm;8)4~IS>3A z;RC?+?-vdNzf0_gfIlwd;5cyAKLK3z>kHhp{;2-ac))y=mx*6N;GY*B0=`*z7`XoZ z&M0urpEBT@KNY|=e`3Hje;nZRPxkyt0oVL#0IvCy27a;Re+zKc-w9mvtqZv3TQ~3@ ziOwG2TE2PUx}P}!T;BsZ2wdCI5b*zy`akaDAE7Lh$Mymfz-L)reg;;0-+apUtA&>W zze9Ks_&a8K;X}Z6pQjA?Cq45(1@KP^j{%oqI^Y18(?ANi#?t^?<4FV8cv^s8E_yP+ z)!!`elV^DWx`EeAJUzfQ|9gRJ{`Udb{LceFb(WXF0C3I!Vc;7@&j@hUGY(w!OaNCs zfmL3FT7OheDR9*j2CjOdz*SEfaMe=*T=m3&s~!iq>PZ1tJq^Hbm3&JBcZIhA&k64Y zuJLpM*Lb>tYdk%`yCnYn4155%=I0=A&Cem=nxDhKH9tpyYkme2o-nNssIni@ zJt5$#Ck$NmM1iZG81Q|PZw~PP7G4efcfxCctN!#1yal-Wl>x3gv%s5Xc?ov||B&>< zJ-{{oUf>#kA8?I-5cpXV{}AvM!iRxt{3E~{MSq~u^F!;yZi%N9_`Sk|z@HHw0zNLh z47kQ$0bJvc0oV8);4eu0DIZst*rNvEAM)G`qj@3@aI_SsJWx1_uR z7kWlq|IhN-mjbVn$`$nSkNE6Ez;%2Hiwy_&_n$Ez*S5lF#K-;pVNCi1j>q5crF`7q zzh!*f-;e3@4jhlazY2;7=Kg-E!N>jmPu|D<{mh7u`}>n%iRT!{@9#JC?}IV-_YYa0 zy}utA_HhoQpVB$r5i@_g*5_53``ho}2}OH=Fv%SAP>hF`7``g`+&)(m@%A}Ck z-rtV0KJITX!#@6DPn!9+LJF1RiTZd<3Xl0>AD@syV(zccQ7I(m{(5_z(Zd+xzS1DKAYd-F;pFj3-fBk%H5y$SuKc#+3<>2^5g0cHv*nAm1{`&c_ zkNfMVC6$2V@z>AqoLh{?Uq1t%C~|-OJm};8`uX&EMSFk!{E6?rq`!V1kPQUZc>Y8ddH`lIP+f;Ymrp-48Y8y8; z)orM)U%REL_J+C})}?O_TvuDy)Udv>c3o3T;M~o18`hrNRM*mUt_fbZ@y6!5=DOOZ z#v2+pUPpoJH`Uf}+FV;O-Mnf2+NQN{YrLgyG;e6C-BP!%sd3ZB z+PaoNdUIWR?dCeYOvGWCO;r<07Cex}tvL6?N;bXj;3u$qRhN1((#WZK@?$>ru=YNOfJh zmYms?Zj#vj+444~#mt`8aDC&J^xCF%4gW8ZPZQ>CQrXO<%koXBYvDAmuU*%?dCP`P z!t1w~`gFru%IX4a+)|s~yp{wS?Yir?NS1q* zgzEftb%eaLElryPwY5zfJl!1g6l1Q=$5jV^DQw*6OO<_^%U)AzPS-Y@OnMum^&7Z(cxgAMDae+(8*8c5 zH#Qd_n*iiKg)C~*1xrtWI(~n@0&k1v@7;Jk^`KL z)5bF0^NMUZPU%^x+xWosyL53hI{?E*E?)z+*l_$Sl2)mW$g`h zUJa|eA zdAvrIl?N0{{gZaO$n!k^=M)0W=K3KW$KYH~Wtpa@fe*Y*_zx8 zP~hp(cQ$wdgVL}#eO|v~`cFyv*#7R3#U`dF#aYn9?}M2x{hEzl`YEyG^!d>pO#f2^ zrt^PL(jSxX`h|LyQuyi8@00W$3CQX5)+VNZ19b}1rJq0B3%EtX>ldcqK;frLKd{O3 zzf%Ho`n3@HQ`WHLL3y5PArvE82n@+#JA5!lhc(EN{f0ojP>GXGs{t1qpKCGXc zB<5?=fA#xMDK@anyBYC3O`-? zBa*(q{f4JW|3{KO`rldMrHJXF|NQ&?>C*4oLKoH4BpU(e5Nq>aeCx5v9N9ljcF7wg((-oBXbm@0r=Gp1}ED3g8d$@!GPnUk* zKY0F!`67Kdecl(u^tVd-SpQ1vIn?p~N_5^u`u9sSq(5}4mwrktIeqRDG5yP_gPP9& zu%xf|=Omir{9jGsr}Mw!%U=3XU;gtJFQ$L9q>uim|G`V~?b=_{4C$xZj`zQ8n)EAX z=)W_PzTOX<$^Va2`04!5OZqJmkn{gz)1*H}8N&H5(>1XU1TtH_!&rfM2Vpta?`vn! zpO^4@|5Jh;SAJiZL4QTNmw&@7jy|lP#~LiZR!JYr@9`{$di(l&>kR3KcwnGU%KYo4 z&(9cQ`aHj%uKtco`fpc$r4)X;@@tXw{pH79BBp=Y4E^W$S3Ti+e^}f&F8}%clGCL> zF6oa;K+b=@wSnoMBkjk_Elq{;{cGN_-fz|`*q)*@w4dRu3>XrbcXZ?_i?B|K<}@6XUF^hry0_BzT>6e%b7zTPJb2skLjN( z?GMX8{4|FO1oVErcXoXG@0y|gO?=mj(O>^6DH2ToRRUc8+_(8ZJBGcp0~$asvMqn~ zyH&z_wD|AmN4?`a|2nm2(Qs;cD}|q~{)~Lj)1Ug5XUX~J(Eln&$NvY3VVoS|gr})s z=yMZfEZQ!T@;Ao5fBumRmOg)Y(+BAg!@q~jrql0y%&U0e{ay&xe=+@!`d^a%Z)z%m zz~>Hm6{qaNsaG)l!!z`M4HI5U!~gDu=k)m&C#L_Vq|alk|MOM(!OOP1pBDXB9sGU( zKF07T@xq=yar1BS9}TD9hsjMnE?NZwNeS;~e2lhdQ#KPzlZ+{!Y6;)szsXJ(>c1L) zn8Ht6es_2qkKGb6=ilYN@LK=g=cTXF6}|^v_x#^_WdWH3)c@`o(jWQW@#(Lj7*xNe z|1bgcofC2{^D6%Ei6&W-Z_~|R%sw>j^_$({O&<-Hg^M5W*!%YrOO}`mAFC*%|M)O< z;+HFv7tFGX9$A4E$CVGKK2qV;Wj>DaKlE>mEUTT4Ij>GmPFD39NdHt>d8d8SZhMR} z&))eN%PCyhH}RRgbD!Gnd-OQc5zkMQChzThWVWfsimuHF{_p&(otMuVh$BhNdZ=9(Kp*p>}9U zw-TN*8^Zgto*pGBC7DyiCa)w$54)I9VRqT*p=~WgOeQeNE8)s-Y%=c_8PT{IqOV3^jM6iM@e4EuoB)~H8wHMUK0;J zG-F7&5>uPGuJXRAr-$n|la!JSJyK(cDFPEuSV)+Q!00($h$$2%c_qVYllh?7#JHGD zJZA{$R>F^qnY2v7nRt|>xZs#%&J>%xlGulYgt;i$h9A>0@tDFj@hBNqn@m(}OmVYK zY_X7Tt^g*UvxM-zrXhJHDJ7YYh>fWdCZ4l}gtReHko)#r8V&=8CDy9dykhtT#ZdU z=LzX1Ql9_pzKJjGaqg$y*nE=KfnsN#wDwostygw$q@(hK<@r^U3rqWGaG3n;9=#U- zO#G@V9QRcjHk@DT1;^TBhK)~CFPgA--e^^}9kH|Jbarva@|{lq^Ye-Wi8Fio?BZE6 zw|w^Q0Cf}PN8*!DRy7{u##X${#=9BG<^9|!oq||1DCOp#L>`w|^iRS{vGZ1*gqZ^! zR4g4!EFD5D9XTu=Ff1J>EFB&!9ThAc3@jZ3EbaO&?eQ(`=q>HvE$!AV?aeLi#4R)M zuvG1`Ei>>i(GJ?ue%aFQ*wS9u($3e?KG)K&*3ur<>XwexG6N6Ctlg-ky{Dy}rey{m zqer?(OM6C3J4B1i!Q^U65Au4Tot>q9oTXixr9GOZ9hs&5m!;j7rM;D$2uM_&uemCSCfu$sSE&N1NP1hk(#2G%JL)bQTGW7TIxPnelYHi#3vV?;6Al%$Zq>0 zxfZ{V^ThpC!hJsB{yDcMQhGN7vMa_>3{hc1aE|!w`E&+*-W-eHN8O;`o=<16AELD5 z_tB)%Z_lSQ*!LKFnqd0v`E&;R7GqCSOTRsz&S38tdzw`G?fG;D`;f7x38vqkPiL?n z;Y;_?)Y5Oyr!(018G9Nn{Pui0gMHT6Q$Ogp=hJEJo34)EM-xrIEuT(rTNb~MdP=`7 zpH6FQx3?P0KNhRh>RjZ6gxeIEU+EsLKi58u8#IT0#C=ApVZwctB8yKxo>(^Cd~(8l zIX-zH-a5IU`M2@=X@(l$MwClNg3AW%OZutaF0>v@EPE|(uYPjz1IgU_NOjy@7@<}c z`h5KA_!qd3_`)7DoR>c~_KZm_5Gb~<>MBb5H>L}CLtE9oVnvI>eMRN*$u)DR56RnY zU3A@X_Y^NBt&u8sZqI4RjBz1_t`3U^oxNn(l|5u-<09u)(NY5 zjWgNa^?B;Qa~DP&tG$;F%kx|sV;{A5ZjDsiJAX$pKS}@R>Hn!3lkTxA;+L~RsHjDU zlh)B<@g=PzPN7!reiwDFx%rVwccjvNmP=#dxy2kvTH{G~a&pk*@#qGsT9jGE@*tn1 zN%vQk?tb^-xcelv#D(tGh>n|8_mHvqR9SnIxebw2G2(=KfKn=<2I)}Nhn(vVZgAYI zBVl{j_LKgF!ZaS_Uph7B`QJxJ?)z4x>YI-J({ZQ&&mVLL${#y=#NCr{CyLdGc2VZr zyLN2LQ&=jQE8p#Ol*F8ld$!e6As3Uq@7PbciX7&&Ten6Utmbrrgr(!|Gx4KOw!hdE zbVvK2Em=Iecr;;+E_>=rVH&Z0qdAAOM%;e3>0jJWHVNxhci_>H-J)>N=|B8Icd&oB zB3{KqeGfnM&_k3z`<(ufNdNGxj*`q`UuQ!_$ik;|GJ^WK zWdx7>#oqZ>d*?yw4Htgr=&Sb52dWw$<^-!|f1NcrjlT(Or+l;?bsF;-DiX&UaISx( z!pXH+Jos=icFcF3+=hX$lWU@arm9eyYv+N3x~SP-`iEjkC9P+jbtT&WbWV zGh~!&FQGBd8dx^ebZMevi{%cDC+wg7f-l)S@@@I1q1=^axymJ{4|O=!vPbRP-$%99 z%{%U0`*=w*`mbDxDYAABF}s5!Th?#4H_&%^e)L;>^-5CP-bt4`9k<`<9}VYzK`sT{ zUw`CY9yXR8z3EK*vk`pyReZ%-Sg}PSweM zo9#Q&*0LuYyK>OWFkU!zI;TJA%zJ{P^fIK4CtGMg_7r(IHrGBaX7qQMI9bu3!^>W7 zenB#LkjA;T!^b8kJ3i~l?pXeDcR&Smm?jzq`i(0l;LpeQ`5gFC3y62W%Xv3?4hib0 zv0Se#$>GW+QcnL$my6{j=En#we$f8P|E6!JW4V_NG{E#9n(cH@#VNK|uC}AUCB1C^ z^}o-&f%0te12;8O%%*ZUGsZl2-QoxAudoMiZ#x>JXpQ%d+ivRIDv~t?yu`r$1z#L{ zM}2WV@|VtByQyMB&3{d}zu?0@vZ0o-H|ig3sa{aS@gjeW;v$o2KU4bOkPL~%21dia zYa}BIjZ`4hnp**{lz?XsQ2ggOiKb^&L?wcTVrS2rzOa`WBx~- zjzy0;t$SkTxV693wb*s4E3;R(|H*FS*Nr9JKdz<$E@tmqb#gt8X?FXGTu*tj$)A+d zzADtT&T*faq~$>YhYe0Txm6WTM>bC@V5g%qPxh_!iVMe1Ja{BtVl|!Zvv*g8$eLy_ z4iCnZ%ng)Gy)VC=)>~qMrc&p?su;x+sBgVxq17~(=0EfjZYOt31rIdA)-NY$?0+W( zjpydJPJG$EeGaS5Z6cj7+HDgQFxfZ}3)3q_bIJ2d+7H@oe3{YF$9o7jO{Od=L=$!(Q=0$rtuleK;$+N<_P?=2Q{Lj!mPX?THOQcO>xFS=^c|ijPS9?j z#fJxCJUitax7)u;V6>xX@a&slu#wu(=#AWvrp~B~6BQ@7h$`dM6}!J`KUG}5S6M^8 zY0M$2f#vzhg|t&TrF~GX@@~!)W;{F(r#VN|;WF)^WuD{yca?j@-nl)}OC_9Zi)84_ z-uZG>u7?M|%&T*n7tzRjPlQX&Y242PW3nR>ts*DNkBqHN(8MFsP1oX?z7M|nh81W! zmj?Lk8FWa4sk80@r|}666VKceh!C`#j>Nk{$&U5!N+s>Y@R$v8Qs6{nS^UVMxO<>- z*4BuXq^23-T3c%GOh#HrOM<2>_Ra&1gPo=1_V3#AcI9vDyoO%x}>svayL&T%JWyQnq2cP?w^BW=frm{7>oL}=gy84 z#X0UM71G%J_^x-1&5rM~xi6(0IMJ-yxI5uKH5VZLw_3X=C++bwI{8h+bbeE5>vMMh zbD`Gf?f&N%&UWXT;=@Y*#i0Zy1jEp zq>GO2orkGLJMM-^S=0IU&bZZNHZS`-!+wVB-BAslqcf**z})^Ult$I;CE~Al&ds*^$Zha z*#A6P9gyapO`K18(6P#@cdaDvU(sAP5~BQVi}X- za-VE{{*8L~ZaywLUzNN1{J{NzHzp^~xSLD0^_M?%}ovSM;zrQ3Gzj?cX((0XXN^}$fRYZS*1+{P~PhpXu&2=T9K8oBxo9>?!<`2AavSK3cY4 z9htT5kCW7ySASPybyUKWO*o$+&yOeN!h{ztj+PtA;AaXt7^NxG&MZY~0;T z>${T?yS~L3W%TTox%oXL>wveujW<4Smbr&@nfnSabGhHO`X~F{!~KU!79U=GIAOg~ zo~O0XxARAFpGH-A-$nh-wihO-YH%mLywct4{)(1mSF10D0nxGc#q6EMNeQ)~t&vb+ zgX%WAJJH&=JwuV(?f*_EG!RiYe1QDFCsIb)%`52TRPkt7Z8MF8*5-?;UrJJ1g$~Bs zA?BE?&0cZBJ>-qT)M1r!TJidDr_OtqVA$EQZikVbT0XwR(d_^=5Y&Wd_Gv)J)wZQfi3EyL4UjvOzh zEfSs1l4g2-7roRcC^!}VUUtDL-T*B>$Qxe~Zp)#u2u;t6>met%Jrbg*Ci~CZZgSXe z+c}?NrmmO^(xGzW%hmwJ7^9wdf_8eSHQZxL)7=qyoCQn2-P&h%@tWS}*=&u}P@wf= zjz2x`Qd6WR?qBv)xo>i{OS&%=MaMfXSzlk-J{h+wAF=wWx~z{k9(b54QUA!vt;287 zwh9f9i~H?e{XCM;_5s(T*;4k`)0~p_7}~60nr6hjA9)JTbaOFUCACHJESljl>VH^0 zgVvV$vDPxjsyW&SbyFu*{h+Rhk+^F&FHwe2z7?zIwXdb~4MUKZ^RR=N|kXSkAgeR-AG#*gk9g|ubQhSW_5$c9H4zTW+!`$xe-L#kC=#V{>bQ!MnU0zm3==4Gs#m07Bf40FOs? zZJtAYLGv;W>dhYom{b8h=zIlwRr_T1rbWA~))8!w~VIgC8#tsqs zKB0O_jI*6DZkMidXQF%oUH*51D`}ozKA%p0NGD`EPT9$y|7YL0>vt$H4J)RCdHLFQ z%4?jjcbbH0yY5`4wSR%VtCQC(D|1at&vw%#{2jeNK)w9w$F?1sq$~5DSm_eu3kf&9 zh`(c}AMx#=W-r-ytFW&n>ifE$e@N{~T-CAGXYKxHORYy+`)LigBf`Ai^-9~` zwPtBx-YYBZT}?}8ZF`OvK>g31NT*wuo?P$tnFMGK-%UZxHbjW(!t8MhG4Hi_|MQFD z^PWt2n-cYImSy-VD@BrAO81qsJTURFUQO$nuOFu6t(&bT8gHpJb-Jd3_u@=Fcx7?ky?EVxT z(XDQ}QCev76!E!Z*Tge#L^m%I`(VM|G#2VIoUyYrTO(Je?As2LG%@3OtQRd8n(0|& zK85j{tpRTL>=^Ct&=fVxt&5hA1`EHN_t4%1Lj=1pd?Z5|2j@Q!KP+PMg^i z@36n}9G$i1U*Y@l^{uO-3v$;-TK6q*ua8vbZqH<>J6g8S{)!ooDTiX>T6*_EDqG%A znVJ)%W^#vF3XD$tjkce5nt3a2l@zzns%DogU}qiLT&bcBU)pD(PJT@!O3S+qC#K>Z zl~y)!VrujRGnc)`Te?v0r+5E^lB5I+0|;gPg3)hKGF*1t%s4mGyZfdyTSu{xXFi{9 zKbw%Z|EwdK%mz3o)BrrKI(wmn)ko9y2RVkQsdREl-<3nb?6vOcZo3k?~Qqo1OGIMP`(Nculh z_Y>N<%_Sq%eA7P}sc?Ve-sP3Hx6fYGPFo~Xw-spZzl8QkOuPTL)2V*YT0hKNnKkX) z#ciisR@BGPLYNb8f01TlNq)E|)_e+Y!7pg-8=#rFMRNjLU8H%rnW8#+S0u)v+9KTL z^T*!#YO$U1egjQ-=|ObI2Q3EMe@6?$hpc{j9>g7@Ab+Dd!3%fGz4rmSr+kKWkZyx7rh92^5$>j_ zmr2vaq4GDhYJJFP+wSER<(zLFZ=Q{yg(&SyB;BW}@x?e*o^0?WIo^8j_6&d9JNFaf zVb5-Ry@cCWg7z_Z6|;N}%}Ho6$9FVN4s!wh(Da_}osmD0Img@jy4CzHZdqlNUHfAt zG)sw5cGkP4yu8bjRnceO&{;woS_#UWSb}!{XvSFKU&BRt2}VX?vq@BF9UM~^#blb< z2_c@bzr?|di@IVO9MUZBo}mZN%kw0UHnzyUJS*W18vFj%5?bF_2Jp zNRR3ymJQo&KQdwIpMWpy-F(iS&|3uDU;M$iBpTAAOeiM*p%2NXJ`P&4{nt;5*^kO^WX}0eSuDPf^#S zZ;|33C`kNXUXJ<$>hkn00{+kh+Q*pD7^#{_m z?DQ$c@1c%+a@j!htzH!_+(Jp_c%k>A`zv1V7WdzLF}tHi3q2pXY>3vf`&!>z&^&xE zuVraOqLt;t3Hy>!?ln3I(c?KI_Ue7Kf=etm+n5Z!w%UIFLTc^OWa&G{?KR;>BGjF8 ziTZAhn0|xDFrLkukJGV)20z`%+P#8mEB|t$il$P9{dV5wNxHAoN_Oa()IyRnF zR>yM}%;&(|hjA}=eLQpT)(o9c2UXEb59i&R6!TD+e_y7oxo((RIymYPqj|=IDZ!gh~A?<5kM|H(} z^6Aq~|HK*AfcHR|JG!{vSx1kSw9#X8WLqdc+7gxL)k^582kF5JSLvsXhE_}oqjYcz z-P`{Un@UcgAK|_jE8g9ZXLLho*xA)4}j`Fh3pan-2C6q#-QktlPt~ zQ*_Eth0-Cn7#Sqphov4ekC6$@VKmpqs786~GMd)1FA4Wfb8*t!#^5%Tb|&{Z=iO<7 za$TY3U3MC2 zF2*~)ar^%5bIoA9-E1P!dD~oW;iSBmJ$kA9#khNn5_AvqFg#p*@{@l4^x@ncrjGM( z1)e2eWMlTIH@P@m9Dv!DjqYJ1N}s$g81bp;s?_M8*@%Vvj0yv*8f|7H9yNVNg+Ww} zR%ZQ04yKZvPu?qw?_X8{ZR=ByBH_lTb>dhSH$3 zm%TF{4Cst^wO9aGYdZa#oR)c~M?Bky=!-5MrLRQx&d3CPCmY}7TwO)aMXXpr9ROW^ zov=Bd@14Iv=QMcn=oD!BD5b&U71_N;=e$FiqV>BsPbsV$XzQ5_UL^xE@1iez*8uH? zgzeTxLLB+7J6D`ck@NCmkYj1==Sso-<`94LROLXM)kDYpssH7qO$)=ONRpoCUbpSd zNxEg-^m(?braM$^%TA@JuFtQh&U$+hxX$ zUEa=H=5v&b{GkVR_^Xh^C$VC#g1O6|b~~%-fbwg{3cfW+2luR)MF;$Z361m5pUC@r zylpsphZ*nfT`PDm@!4UDaNetl+*QXC?i1dlM%K%;pD5dYG!$`u(~ckyLm^6n?$mit zFU@;`9!=@xxr0fyloF%ON3L?_oU>OpBUk0_T5&d=((W@KM(GeXpjWvb=F16Vxrh&A zbjX{ge3_4#U2QHe;lmo=Wj$}Xy%zkJtZ{@>o-(@~# zb`M`R+tYm3=d<8rW{(>St~h))=(FHsW-l0vy<#!qv*2U4D2Z|^ygkil0Xow>;A3Ws zj0HDjJ`4FQ_?X!eV=>N zC2d%2MD2f9TSW^cN_#7dUg4NLy0fj~n?$p1i~c$Ve#3)*D?$qY4+Nz**|~k$w>Y-% z)E|AdH9x_znj6X->qWV?iY%M9=4p$iZP5fp!h;-Vk+*I+kcgJjuVzcQBjyHHA7)qN2J}H-@ju;7lox&#dbQsIJaX(h9%Q^r(S1w={!s4aaMd%AWUUJ zkJS;Va@RzIQdaR?Nn|n~cS|C_q$}hq?HLtCx4lLk5B*x|wUXv4>KfWs1j!e=6ZZm{ za%n{VOyBgx7yoePKq63D5-6cmwwvo!ZZZ(8%F%<|rY|gsPiA_^dU6kC)e^0OyoVOG z+ke8*6{?=y_B}dh62dijQN?-{C;O!f3WIj6gTxLl$7cHyoxeqQ;8mY zpw6EMj0VTuH~P<{F77@J71$V+s*#hk?Oi|P+b`~T>+tLK?lyBP=622k{$zg1&m3FL zm(ZBk%Fi4p+~M-a;z!46j6Q`QH_j#^HTx5h&r+{Vzn>Z|IgmJk-bOx)yjnv)@padn z5IkTaqZ9(Ik5JPyiJ7P1x4e^blh!4#&?S1Ng_<2z*noZC#dNR6p|PNwc*~i5&!&dv zBJ?9+Ubf`Pgr5-!)3>>EGx{|;l8XcWi+ulv!a43!wEU;?3r}6|k6usLX$v(LwQqaB zXDYF9`zR#gm=o_tEA7Dke=5&KbnD}fRG$CsbetXA_v%Y|UWASXt1hI6L0K0!TJtf_ zEt@^p+k>RRJ&^2JGFG*1KbxA)Rapo~w_D!$8jd37XZDmwRS9I2@!qo1W4xs;DICm10{ zx3%_=v1C<`2`8n&Q!!J6r_FD^i#|vZQ17*b_6O)ki)TmZp4NU{i}H=Fag(TTj#TuC z_g>@fKGU~pue;iP*7U+jYoBTLJoj>Ps{^@j@SK6}VvJ9o{t8{8;f$^nZc(0TrYVE- z#@%gfXQu2`bZ{{})#}XQZZK0p-6C!4o27u=_WNU?ts4 zyC_2U!rhA^v|g^Ln%w3+CDmVLZR4k;;^%G4WT-T5zl_R+`{W7^F3*=yZ*FEjlrKTb zAATaAS}1KvaDGsqN2P5x>$yN$cxCH8<*lfPI1+x$X&FfzJ(K<^ntByOZcu%raD&Qb z%hz9;a=*^h!om>e%uc+6BzkpTdL!?~9gQTEpy`$Rhv)FmdT2+9e=)FR7Cqc%W#`Wt zeV6yRS&~$nl4W~pu0i_VJxZerMf)f6DoNgz5lhfHuLR2TCc}$Ol-4+>nd~3EhO|=N zj{b;Z9=())^kM3NckME|X7&haSMa}h4*@pwb%&n%)pX|Nlgjf{i_OLtFK%`|WmgW7 zcyBpT*+vulA<7Aw*b_f~Ppdyh%M`AmbgSfmm8Zu~ycGg1E_nHqy~C_~64|@ne!-KJ z-c1)i6k}V&x8gD9^T{2Gn^!#iEGylU+HN{X63Q-zo6e;Xj#HjZ-@N|uy$FmeN{a6V zM(LKAtbY1`Xx0D=O-GXK=m}8#PNTP5$;&Q>{NXOdnKQ)C&d^zm3&`I2CcmyBR&0t6 zJ!8z5LtM6nPKO^>B*;zNvF`BhQR79f^VD;2|G*0%nP}0bQUm`Otc`+ljqs*lR6+7| zO1&S8OD?<1oBp*eq}>xrhp)N$WaDrz9dLf6R~~3PLx(NnKi!6L4^LTT(H0epzQ`>( z!}PLWqy38VgR9$*(DOj@FvPY)&r^iuM>s+DKW6XP-~U`m$NWd;J(@E=uegtYX>s~1 zw8|MGOX^;lmX^4GYyBU)|9?XBe&hCVpTd=jm#(w`n)hqoPUTW;J!JPEDxLQltyy@G zrI5*`@22?;&kb5%rS&N9q)|oQA9o*(Z=;_#(eRk?o{b>etCya-?SJSMf|Dl2MTOqX zd-QzX*u1~2vhUxpbguj7{^u6C&(NxD^3%5d?!$yRxxW3#{k&ea6G!Q%9w|>l6F+Ft zTSF(>6DO7(XnyauLvL{Up474HitB%UK(k}vio~)9n#@-$D$89+xBo-uF9=h8okdvO7zOS z2Uodt#^`Lfn$~%1=piDZF+NMU)wHHtLk|%Nt>Lq)-D+COt)YjAgr@nd$*rap+>WJL zO2oV19W&d`@~deDw_|Cy?=l}V`yqY1)wF`!v6Sn#hUQ~t_weOT-aX?pZVqa}$IKo# z7TyYO$5I|t)q;=Ng6FMn=UzFZF}h&E$81qT-)^V3g4?l_E49YK$8534Sa>VA9p2+Z zCIh@fOA8X53qs zo*1BqG^lH+prrh9?xv{Xef;mVvyQQwtEQjf8nv7l?YenW+)H_qn6h`?%hO!CQ1P9k z^h^sqBG@)(%0$;FTzMc7F3xi=a@T}|#o6rv^N7Q$%+{qL(n>uYMciPweUQ3UYKV!Y zv?lm;?w_a5QT)$P6(=aSvyt?KlX>kLu}^G&fu69CK9N^DJfSXj%w~>RoLTbwuBzO< z#&!EXdK<(+z7d~HQr>c7pavLgxrHX(_HF;c(eRF?`QT4&Xsd`HoHFZ3`kmsEqNO+4 zrh9NS?sL)a=GR|S=@fUj=yn_RqNI78pK58F@>EMPo@r9#IX&GyqR0x{UF6w0fw2{t z*JvJ}rBbzbKKPbVaNRyGJQolZxtW-9&P3gk2#tKc_onFdlwOcRT^koF{aVT7DrGpg zeV%XMPT%yT8qMOo$E_mdI8PDdJh7woDMh>>PGNbX7^g9vrbtxf;xJx2a^Fd4F1&VdX zSs3IiM`+*nan5zh6?zqEPvRpydGj76inl&@EJ@GMq{|;GRyWR@FijCGz6)5vl`p0B zmfCv*&)aD0^Dgg66WV`Z`>0EMr1acPjCQ&oq(@bF3{abd5^kT)1`Q`DY+}rO!p~9xv!^rXGi$vS1r>x`Ej4m z(-n53jFj8Es%Oz}_)3=1b`7bt+j;kcejD8OFZ6wkmIB+2SvFoW8lhmiUfleVsnw9= zc^~?9EcGFUMdRrIp+cqK*0mnvo7nWa5PRoiPUFGA2gut(82Z`fQr$42CCP&hZ;+U! z$e>w@*gF@^>bTe}M9v`%ZFzdwN=ktr!lHUgdCbn#yY!R&3n(XDdd_{goWqc?DP~jHDUb#j!a9?BPkPYd zlhjg7pE&vwiz^hhWRCC6PLBW0PMjjg>OC%D=8f(kJzv1hf^N&T%{99th1inTvEomV zR#Sl%#t*;rg&&P~TsSGQaGcdN9dDb3QT^E;)o5{CQ%$s0kT=rE!}rs{l#loRziA$4 zq*rP*t)W5ZOIB6uvC=JDi=6|%fAiwj96!wx{P}_)MkAYryIzx6|Ud+y$i>i42dQooq zI6Vi>o3!7gNQxIpZPoSr{cljDSC={m5>^=}Hr6n6&J?TE?h7O{>4gzv<$qU*YRyXu zVxIkVM<_GDu*d(tiE5|#HpN2qrT0xFbJtZIx$v~G-ToN6lACSsy12$!JV5U-`6k^T z$awED;YaZ3smznf;y^6M&d}LH%P@WqRJy{UQ3p|c85-XuS%^|Xx`p%ZKJzs;&&*Mu@E?qhq9J{or zgF9jK29l}iJMMEN!F2vCV(k6=N*daQeYA@7@-hA1#k`)TB*L%J6J?$v)#um=+D&j~ z(a)&rT`Gx=g(o@N9>{Qlt)m&oJ;j-QF+Fj_FV0)_iSwD?&Hvad2gp3=y-AN=FB2lh zzk>I_GLPQ!;+$-^ed-u>_O}%)7S5E5eJs7dqS(k+({E}E6=%2iP7^bI=4gX<+pj6w z(P*J%ar%M4nOi<}=K9aqZQlHaaMecobIFbC!)a&j#`PQO!smp~OrPleDb+^$Tgdu1 zQ}xfm3cFFy*Wl%&mVFY9qn1$7_ zDky`p$SR2nF)k!7Pt?RU8I3U-V+`4i#srN z8GY0ABlT-muU$WRX}WG{`n1#ZlYT0iP*cqH^xNL+R#H(+;;Id6m*vQ?X3^SZ^t0>; zD#uO%L%$@PuG?U%XzhkZQ*Fza6LtMLTyqSPE&(#cPotltPRlO@n~Kj!HSyHaGM1yG zW#+MI{UgL{^{<+rwtnqd?3P?viM;5nWvkKy>y{pt9-UsfeglCU4$BZPKch?qKXNp+ zBdJ^bwnUcymz}o0b+!3XcB&u#v10op%p_san)Pd8g)|q>o*Ed%J%7$fz z!&=U4U6XdA(@Qrj?KCyZGq^v}EoZ?I05U{oIahJBK;=%I%-`@m!(f74b;-8bx?6OOSGT5EWKnS zwMGvA%w`5f<0#(GSiN?0dhCB!xCF`C4a-(;IExxWYeuV_wrnNqSaKFM;HCVeE{GH_ z?VC|}R4bCx)R|JYOs2`J=x4pxQs7C@r@1k6eVLBJ=wG|+tYu5qEz9_sat==Vsq%n- z&YW^|T(WN6GRj+1x2`55MhEimnYXT5y6l|v=o8ZQho$@XPkXdcY3{YBoiwd+#*C8} zO*?V!q8W`Xizbhsdzc<&#CWs<8dkg*!q_x!Tzc|&9+@&bAtWzZwSL*ERZAR?c$Uql zCbn)Fk5xH@iX*hlfQCo8^ytWMuJuLhRJjsCeH-BYwBq4Q1+xJ1yqqs)(~!HjC%VS4 zaGrya)6L}nz?lOO<|Ko+)vUY*!4Mb`2AzYvnTm||!@W`fUP_xTe5qie2HZXFj9wH$K7 zt_xt$S3rzFU9(j;6CiY`U=ctlV0AOwfH`%GY_SXwFCF3!I#iHL-G4*ytwu37e89Ka zvNh(jZ-`--WV6fyc%~(_0GxL~EdjEpSV1!Z&a)Xt$JuxV;3g!Xy#B|LRLfebx0v&Em8;4O(v!x9PDvuf#ya(CB z2O)U2C;SN$BGQckdBw)fLV&Ls5_dm<`S%I=%56jbA?h%b-<1Vnqvg^)ZuZcuEKQcz z0P!r{4Sl$Ia;pZ6UXl7)fO`xZH4uPrTT&xHK9a^4acRKa+tZK1m-PdN9m!z*{`0L> zR~cc+U<*-!@qPzHC|g}K)IDQMw-6u{u)5|p zU`}1$Sy)`%A;H-}1=nwRH9f-WeqU8KdN8jzB-oh6gKB=j+GwjA*5t}&xa}hzSvka7 zUIWCl^fB~i^Q78Ej?f^pb|C|v+ttXlQuC}CRfG9hAqNxoSicbS5K;IKh1$*K&t8p&C_bq8QK&WLS z=2|28ubuIwg4qCvdoeM$4cG$52++57Zo$?r*9uAFJb-r^5)F9CKNuKhQ-1`|FTp%p zf-csuc>rNE7j>R30n9C+hwEdEfMH>7sSg4;+sd8|(3jnO5Pq5q*@s!#3jv}? zR0)+-2|!USS`q_nGS#Jm1pw!`8syACVJ~qy7icKIBj&+ati@>F2@s}GJ*NTBvSuv; z2s@Y!u(N4VKAT1uhEn4#Zb5wXfG_xmDhwcMiP`wnEnoa~5?{oo0e6pk0L5KnSg1{X z!GKR%Qr?;OC5BbrD-v8BtW##zls90mGkG7e>hc=R-@EYzA9!Ih%`K>|HQ?Qj^aBIl zN{1-;qKuClu$QgKh1r#sciMQnv8cDzHCt2A3vw_A7G&53kmT+B_)DkS%R2$pmP58EaLsxxT~3V zpe5t(E?Z9iR}S$y`($eV;G|43(TrwKQqVD>S0WNRCNEa=IV&z$!XPeMh;iWsMQdC< zM`m0))8fJliQsJ6gLB9poI`g07|NDSyUwP^gu^+mvhB_vS8>_@TbJ}1QY^l?ooD;| zU%xInCbI4RWa8wXA$x)Gdm;TQW*-|&o&u(f@hpX?IopVbnnQv$v}LBM52@%-SD)@( zQB>PE?+}2zg>{#8ZlaN|yNnCY-(5m@LEU9se7^1y!VBpxvt|F|Cgx=4?=IuA|8bWF z$;9<9=kHI>C+EbvG}>!K&v2Wad*^*of&r$VoyO)LV9twaP6ivdhFRT`rb0gIL{sxs z%eE{H_5GC9@Te)CKS28S1BT8*dWEZE8fiHOH5iYH1j*xUi_W_oiwkB4sJ6IlO@(+E zuBrK)71!`jGoAe%H=JoO8(v}Bff~(qlr4L34%zv83-rovwLKfF(vxh(s! z_yRhRxGw325P?p2{!!`%qx0+LS-_G6S)A&FEA|gC zA+cMlvoUzBca?y_tHe%7@=kf#WxCDs2{myD{%_dw3HJ)H2u1xQd-!bGpIi?gm;H(L!VvtgTt%Op8wZ;RNA=Ub z6Z+PPc4CsZ--53oMehqi5N0@<8t7SKBf)1B5mH zkdZoo{jxDJk0k@%&5A2*PdYSVidRVgI?HI>V$0rmkpc0_zJL=;^G%jz=2;RnU7e&e zsOdWDUoSJnFXl?jS2vKn$YyT5I!W8`A{oSWHj(;yB!alnB!&Sc!j^xtIXrP7qTnT* z1LE=-icDBMP@jQlz-B9vP&L@>EMVpq7c6~rT(l75!i9LCc5@#cm(H}f@Iq$canm^< zvt~s4%ziNWapoS$7TO-T?RqiC;zY3C3l|LF?eusa)aqb{$idqz~yUh z-!QB@%rgvV0uJQ+hL~a^^*z8}@|l6WVTh%AwvK)ZWY}aT^ZD$0$VfxBLdFjL#|47` zdBULOYBMG}b@ACbnBO%D3)m<@mJ&PQenMR<1phZ|`Gk98ScIZ}lD%=Z>`$&Yj?4bU zdQ1rZSFWN@&W(RHjRMtA9SZuYjW+o6_A&4kr07{N1YtI!sqtaGuo*KnC~H(Rz|fHV z88cLW#jyi~HQX)3mL3N%WBxGaF+F3BD{N0XG+{bcNUzt&6k>!e%qR51CoWjJmdA}2 ztZalBfAvw&L@zF$yOy|grp1L9GSSPH{mH$viOZ(0C2ls6;#L#MjX@fUk3@07|8#$U zaz3faioquMw)l{HkqWy{d` zt^r{Uw`ACI+5z+vP>WWp`w1w7miDAW6TXNjq@RE$tlkUw7P!F_7FpQID(_3p8WZSa z&67SC0(hn+%?EgnCAC~(Kxm+^%m9Ab9fEGNSAw-q@g?fBu9o zPnQ!sAA)<^$ss;t(Yff}o?x$B|MWt5y7-T5^W`~gqVdXSop(^KgK!usiM|l1ILRnO zl`yR_rj2P(2RAZJo9XWD`4Rf4H>_xjD->c}qY&dNh3K?tD4$MlR&kX~i)&>(Uus5R z@GOgrU+ooil3}Db^8jHDoi7FmQ&`_jYuI0`VKV{36wL?>hLOZV?ZP<$s$GD;wWhWJ z^qgG;XY(I?=Zm~h1Q;`a6`TU_ELSH*IqIY+SJ9hn(UlG2CV(g`7rm(sm@E1z+AMc( zuSy0O7TQ|{SZ_#Frh$M*J2rrxI|jlXUhEA-IZ>S~4)BMzGMfRyc4l*CYp6ZrpRrcW z1?X8-39C>sB)Sst?bd?X08t6d1{emjpXb^NDY6wZ7a*!YGXg`Q3fN*mXTU$I#uxno z5rC&y(rkdfUGs9-H4k>d0=8>j-r*TWz>73!?6)1uXG{kpL>PdQ3Q=3`?(Nl^C;q)$ z;@=B$h=0$?HBbTKw<-jIXZ=={L;P0bWT&M7@!N8V-)iNEe(#NV7t{LQ(<-+VCQ@5m+oj$GpJI2iFea*5xOOZ<+55r0oE@%Q8se^0^U zSDDzQwzxw9!6b_3Sb%@!Gv;Uu`AZa+PJhz{LO(M066x;-9BFzEBB41pIZ}%O@eL($ ztuv&JjtgI=p&b*KYpNQGH`tF1Lxr`d1t3;)^oKm~r_I_xLmx})Mf@$Od!2-QO21%C zKHLm2G7|)XVTFh)Yt$}i&d7iCpRW#P+l#9eaD&|nYuseOZ#vQs4A|H0m}*h(9(Uj> zQwEq_z-k_oh+#%5&1nH*YDI$~!0#F^9-Z?4^RKwoxK-cdDMb~9xAg7W|EAqav;J?COoQou|D6FB_Qt^(FZ#~K$LZ(T79;HU~s zE3673Xo?kN|LW{jrJ9xsHoXwgpF8@V!JjY7q?eRye5ZMW|2GDQL7*E=_7M;AY?GQ` z9Yk^2@>g@Vpk@eKYP3@W0{A_*a!3OH$TrRS0B`G{v(ltA3HYamMimDT&SSQ?v0(y*Wx6OsyF0djcQ`4w^au++qF#y6^#k(ZmN3t`a^J1`#8~c%TRo zB|XY?k_GIIy=n^chI#V02ZjErvHMIO#1Pr=ivY-PO(NL<5CJ88@o*AiJeY(ScM3_& z;gVkjIb8A!V}yIe>ltN081V!L@SUbjP}hE4g4zmjd@Vwo7y#dmu>wERPKcTT!V8cZ zcLeBhUw|HW2U`q(oNXE*Sq2bMgY0oHf$m(Sp}3=dWJ-9l>k&uc6d)p=`n6F9A;+F3 z^yHYK$w`aba}b_~=_qpCe9)cJ+^&Eem@9v6vy=I$gs$dEQF^I@|JP`Kn<>894F*W0^s9xK~|M)CPR6o#QkEMA5+-FFojS2Y?>;0X4R`2f&)I zM6iB>v9dV0I<@Ido{nCfILFXFXPzDDW3f&3k_6HvCaIfCvVUHiBp~@jGlA>u*q{VS znCtllfcAL%*^va7`q|@d_0!_6_0!_M^wSFUC&pXqkm|2B=A$_DHUQJu67!c0i3ISQ zhQv7m|G}{VM1h$tUQnjR3&^y1!I)NPfjXO-rU~xtW)ATa^Q0~W;5^%_v;bUbNw)7n zhf~008S&}V&qisVF`XJWLcl4jY&O7ROKQH|fOncF=LGC*%6mAj(YON5xl^#|N|jn0 zRNPTSZ-hZb1(iuE^$97RUS*V{BaWxXD=D6yufotY(K4u#YYWYTbs6RPZ>-S@)#fbB z|4GXv(}vKN3RuG<%Qlm>fDN>#P0jW*S!9O_a?pGW+O~>IB9B(a1u-q3uX4z#%^@dm z4d;-P%pu2=-&qx(^u*NqKiz4 zpuB)jtpCkqxyn2X2)paEv@F_bNPj6@%7bQ*c+bxN=A$ohGq$`7_dZ4nh92$;@_9Q) zp1k7<^2~R`T@o;K)4V31>X9*X3#ilY#fC4MEba*~fGxH&93kfOJS5#~+{uG!-aN*;7?U{<2IUXE zK{+ss4oqTbh5@kJBym>2N4hmiJ`4IAhV`bAuo%FX+J>_L;Bkj&e)7mY3P^JoO{5*A za}9WBS4-Mqzu2jpS*p7AjQx>ukrk0!M2t5f6%`t=I1 z`)p%a_%j0{{zWm6=S&Ns0t1|H+rmPC&skCnKm@Qz1A=I#VgN({3m*^!PXVXPvO};L zar3rzI3F7u26&~i6^L*cVJe*20RPU=XmA7gz9lsQ{HX~M&I$NsL!%l6c&rH;W&=Fe zcKfpdVnkpzz@M{hEdc-B4kDX|0bXer#S1=Tz}xHyxoH^ShaDS03@@w{@N_f&P~ib$ z$YD0X*V_?kKETOl7-BZS1I^e%(g2=hNX!O!v10>xp2r6GQpW}mgBME!e1{pcNGZT~ z%*e%TfZZt80uVzNvjINFw&wW&(a@<228f1EIstxY8YBw?j25V01Oj`}G(zEwHAu~w z-6ChlTO?=BZj!UnBr$SndB8A^k=Xz-WU)NJ7^H{|Aeu0<0mcxebpS)Vrd|XfnmA`R z?bJTug%*=fgyTOA)jv~}SFa-VJG3ju!Gw&+Cw?=o#rvI3b{ ztaVT!XBZF-Pxyd5Yg=IpK!lL+0YMN^(EwsN5I!J3vjagBK=l2>2Lz$URWsMlyaw06 z>L!2_4M}nXS?~A&erV!U_<$fxwH9EARAIG<9W|Ol1D2Yn@B!)N_y8iLwLFuKh}Nos zAu@#(2m({H0z*s+s|gtU$RCvR5R_jxgAB>p699S2jy#P3G1U-0AP<`3Komv*@$=)t z2L!Q5d;l*^p)MBz#KeWT0PZkcA`J+}Dhf7$huFDJBfy@9Bw2x6YsaXC0KZbM4G}&d zbL@Dr5JSikvj`!r0MUbM>r8Lo*LLR%0gf}>x$pr&CrXK+v%hA3!uQ;RCYS zcKj^>i+aJw^8sQ;CRu@CPR6Sj(?HP}gbxTB1DOI4UAXW8LBum(EZ&6=;eNyb*tZZM z79GL|1f4j^1BhlId_d4&6CXgYne5TZynDQvpiSIhc*q|BF##iedjlYUv(01y`eX#I z@BzULi3VVRm1dzYd_elyy_Lpe4LHTEulEK(eqbj(^8j9C0#@V!Il?Zw=K=geT9-}u zfZSk+RNfm6hz?u$fFNFo45JYj*wccR?F)1Yk#w##FyuKU~lT5@IqHoF`f0f$3$5hbOYcW7NwMk5m{I z4_7ZsJZMwFW-%-txn7od{31&{h`lWFP=;agc=ocyqZ(P_p$)ghZSIw*@atyhR{Oyjj5Dc-!zq#aoCK6>BD5mUv@9 z8C_e^P`t%#Fbpr5E}8eG0AsdN#8aG9zpc~TK*6LX3f66XGH3&eX^YDM3T7`R15nIh zqF@Wl0g47@xPksMrHy490b?TLRDx1tSLF3=fUz=n+@PTCM#1@P2~f=YJBthG6CVAp zm3@Jv@0h7kxvap@wq zoF8<)qo}8~XNXBW)=X7$GQ}G)`x*@xo4PqO#>1a8B98AhamzHoj~kjRGAI}fOjTgg zgN17jH)0zWlbjqZ@u^M@mV8YGYf8ihSbx!_ISuBfT&*K1A>Oa$^c_<5k?@W zH)eDdrlIz#E%179z!)NE8i`K68-EgtJkv$p0K)ev{g z7Y{e46>2IbUvhkFS0A12-_!aj#JCrQXiYP%P>69q3NgFMbq?C#T{J1-M3GP&Ar@K= zxLh)wX?(uP?vId8Ac$n*RBb@8_>}BG@Y0C3CIPzeCy79gGdnIKafCsp+nvJ}oM^xf zBFO`YLk_fgg?+_8*cV7G2oyKEI4or@SYd zojKwIh`k7r2jt6+58&;FBz!>r&bKwIr!w_i-0uZq# zd^w_Rr;RqRig#vJv1E@gD#(|pZ>+jeMD%|1ZHG7;9U-CutiZk6->HC{Y@!6rz!4o} z*Zu&A>p;nO`GN&MPKya2^@c+V&4c|d_DTQ*f(i&!=tfrVi2>t`3B6ngh%+X14hkTY z74pg)+TM+H`DlFE(gp;AC|nCIJ+g?LLNndzlm~4aNFu#t))ZJ{ zP^tC?cBW#wYvMzXjXg9X9fVbTa#*!6+p2{*tlE>qDtmOyS+(#WtlFK!suoy<6M8fu z%wg5;99Fet`zr4|2UBC5wxw#gSz%6kzB^@mvjWoFPC;h_OdFD92C~BO;rJ6~vD8uk zcDBcJNiUEi?F;k976ZCtyu=6OdCNC@p8@Z8FV=5XK#s7-eVYKzFeEV<$Q;K95HI3| z56CvlHyiKd>&%K)_<-Q;JoSPAF^~%1nP%`i*A0T%6R!D~)4yZqLi4kyGxOuankc}S zhJj3oKyGpa9bT*d(vli6#_e~c?0L|940==S)Tk*ww9%-LuW29%u@gpbf9^=6D*jFz z(9fFv2JCcsNxw8M$3~Tx1k&4P@2V^~9~-A46?9BBysVgTU|HoQp&~Ht@RH&c;w7PC zFw}cV2kIB9z8#6zVjdCVv&I)FkPzcV5n{X$LX4X)#JJ%?JP4C_t9P?a-mPBCHhH(o zVe;-=)4kofrhB_p4wHB19bXZBIHF49-tDFrIngw9p6&uhXTdX8lYFMf1{i$>vBkRs zmWGCd)>6o#Ek2Jwh&MfWwTGj(RHr)wAO~>-Fkd*t_3`8n>JI+cFBUF^OeJ9f@=%F) z$F0tqJyn|%kT?lRiiQB*ZZ|{o4*5C641<_FrH`8!pR7UjGGmR*Y=PhU$fxAC`-P6Zjf1mG}#^V=6qRx zWLRG?&*H%SeT{s1E6kz=%M%(c_6AsPV2vR}jPF}}hmT3MfzaRV$rhW0&Z?#j`?WYaWix>=!mLgGOqiwP4TjAW-}7g)u)mL06Vvh) z4`(;OoYtHo$G{Jn=YcfqO{Nf7T}xvHg3nH9aKhpUr!rg&h^@zCd~ z^=*JpHks)N&{_lDW}eIj_}h-{WdpwDNCvWxc#N2CI`EVMgi`)4YE~PtbDeB}utYNg z^Xvi$`!pjk&su;}%;>2Zt?>qkm*Fr&hlw-p;j{j^NaxaqRCsBhs}Ou0L=yX zuEr>+cSZsX6PiYQ@c>H=Nt**~y<;>|>?7_x(^UqM%`!h*%6yyM0C6d>FrhR9Svbvr zH#rgnFSWW_@(CVm7|u6O>KY)W+DggWTR=+lCn5#yT>jc35Qyd&j$0^<`AWLNFuY@J zTnO+zOPU3*UShqv5Poo8U6@bTD#L*4q794yl2Knwi;HGj{ECMHWW#t0d4T`)a;RWV zyck4^mx4%z7Q#7ba9dn5|2d$z=tBNP(4|KCE#_IkXb0B&O_l@s9kc&id9O3JqVjXc z0Zy)a@oe(hM?AnF7dFjs0@NosmZiqn(P})?s9xd5Jcq! z1VO5c3d>3&;)>{(TS_GpBg2TL$U`Z$qh+PEVw+aNtR)^wteqTMQc_ydsbm-tOC^7a zR#j#>BEvya%Da==^utZz$<9H?3F{G7E76X$YD!q^QC3VOVve@SjB|C?my!@Ml90jVZR5;i3|;E{ zSVJe4AtI5Zs6-?lXC*Su5{GtEZ0PZ}YKS(h3pryHQHNV~RA_pAr7O(j90@fdd6b_@ z+$UseBFbn4g7A;w^-jZ4)Y4B>>XNZl9P?w3qBe6#s-g1Qu~jQaDXIih_?_$1>AY%E^(=6>+X9 zMuZ?!4^@M^uqAU#=9SDL){|NNU}BrbiW!*hnacPK;;3YxaY)dslz}F)BQSO}JKe0g z#h@hvsu-PV3=#8Zm5|-Dqo7wg3z_3t60s$7OTL^nyTs*SKI$Y4jhX&R`V%Cxp>D*3r1%ryyij5&bu+*h$^~)S# zXbIbMy0O|g=8T-?1p)m;W};G8Cf8jnJ84!Asw}Z(g+-iQM4iYiPWXv8jld^wkMK)>BsJKGz5oIz0XR!S=hqM4j1DTAV?R0oE( z(f{aaMX7X6Ahzf?YPk~ZRmPrGYg8ad&6lg_bvYjK6S5_GBcM_S0sqQI^v6aeR!R0h zC5yYy^zb*6#hrZoKa$BJAK#x$CVl*^WHOkkL^%IyMD*9W9`g1n9`eq74|#W?hx~1^ zHsB%_@Sai~PWABjl}h>e2TDag{$ENZef&eELLdJ~g@KQMtdhyoJo$fD$>1~i(%&Vx?L=PL}14e#fkgLgy(IW0P5ZJ<#v$YH8j z3=`yV)yW})lxfPz=qS&yqkY5bjbV~|uuABX^pA#k8ICg<_`rQMLM6JTqM8f8%TDLlF}^hoMwE2ZCz2?s@I-X7mz!4AF86e$ zG|vT5lgHES^RyTZ-{-Q-r1FMrshHQG+cP!MbzbiEe(nu^HE!~&@f<&-KJ8cIXG}=R z&~u)tIYG`hmBrm)w8b9qqW_{RM6vMPW%r~tj*ac=y5A2zLhKSh@k2L zPVAP*m3l%@^-@->R~Uns+IYx z!(4Xu45}{4O0~LbgR0v&wNK8xLxZZHbL!zaQwIlCzvtAoIa3z}RZ?Sjd#P2OX}*=Z z$D@R{Dnb#tJ4-2Yp=hT~XrVa|K z9_G~V=1lDzRK3Ef`*Nm^52|d`?}A5J|i%2lFXLDdPIIx=VK)S$YFQ}2kJ z|7wD&)lB|+!JzN97vW$oMlqJEDf5OPv@p4=VLaK zf6UBN+Go~gXp>BqH#y5xFN+;FwEa1<^r42Pe)(T5ZX{5aE(>*VM|D;#`$R|gNP40>VOoGhBF->S=9$vq+WQ0_^&M{-Ze zy@T9~w0+4Ahl^aUst$v+eF7h$9R0|IgO3VzW$>>~q?)~w*Ac;#oXSBvInfK=0Q5V5 zjD69c1H9yqv3vbt_4j62mD$0|{(S5eGpv4xbVjeLQW}?n;C@D4SG@$`HD>gNst;s7 zDR!0XnL}B0g=g25zFph>vHvRHuB-jA{~F)OYyIiub^d(rdVe~3gKz$gs-qYwWBE<~ zP2pv#@->=M^yY!Ik95O9HZBt;GFNfNr>zZDCmMDCq@5yxeT(0<6(ExMjHT9K74!!X)|<4f+^ z-x>8D6;ublnb%|s6iPvrCYt>|tKqaA>K-rc zyK1M##&FvA)I%DZ%GeK70WxT+6#Qlv4sCb?F0TG<3CmV zXY|ngA2R+kRo`TANq<1CY4+0}R6FRCXpt}J52^h#{q%=b{cJz|5w&KHpT0}&m}_wE z5lSCZ`{xP{Mz!hAlAs zg1?{|fFHx@d(|Z1m(>&gd$oMC;UCZGFRQ)48ySC9?cHY5C7xbWdnfhO{`i3X|Au-M z_$ucAliCM-(eZ@8srCb3!T6umd%!m`{l-=)|W`s0N=`Zn5en!1Fc{9qeRU|A9{Ey(GNJ!>q;D)d}DCraIvVrkmmZBK$8iwG-q+Z#EZx>`mapzncjh zmxJcRdUs9`l_=4BOv|^1cj_%jc3$|+Pb+J$?hf_lo*>^2^~S3p zJHoEgPYUv#u+kyl4fT{)Qoa|aUCQ^vT0vf-rAYXLaG)Tv3ID^eUXY*{rTi!yCcWt! zy$QJ|+?lX_Yj|(?3lF=GcG6thPr_Xuc7OP&hy65s%)@>bKJH;V!`&YCK=_2lxDAC5 zhI>5h=i#qC?4j^E4|_O#!NYzL?$wx7!Xx3U8j}+33jd%nsnlPFZ+h6C@Xv`_?lIrx zvi~Yf?AM9hVTVtJA8PDW#-0vSp%nfF#(o_Z6$!?jdH9>~2#sCF*t221#=gqfbL3s& zyqmG-!v+ugZP?J?rTs2!81Jwb!-i7@lX~47Ht3FC3h{C{-osuACumGu_-Z&wW8#X} z!jnDh^>CWTxPgWH!s#00;Uat^T)Z`?`;)9%37x5;{RH=CnFBax2C%#!>_ibG%aBx1 zS4l8m;ccNT`OXSAdm;ZBKjhCfA^!uK7lh}TkQaN;H=!s6+Zqm$xD@2G;ZQ-OAfF3| zxs;2-5e~UH9OaO0;b@0^K5THv7s9a)xilQ_kjuge4!Jy>K zse=5D!}u%VQb9!8t>JRr1r7{r+$)i=&Qy-b?Qh-}2{I_uFSGi$a0Kfb~p`aP5h^iWZg7dR0N zF!*RMx}djL7J5Aw7D`%o0aRQOJ^$AHJ8p(u4^uxtz6e!I!EcQ zS;{j{>8@Fj`D&Ug_9CVGX-QeEX1J6kN_X0la;j=_DW@sjgGCNk-`V-F^ zm6BKBKQ0#d*a1X;^A3T>FuZ@)k*rGKw|4C>4jlT|U3MyB=J>cV!8kK>kR6_<{q{e699n~b@lLwRh64eO&3dTFB zt-vKF%GB0}j6T83)rG)sVE)c(8*r(tE~;qZb=qFRyQ+@B-#CW&d#GaIl3t~XDGa21 zg7;P>z&r5XL0WYpT)$$N)R|7F(Z!6N*Sl8?oj2%L3>^HOH@a60oj2)MBf@`9Bzc8r zb4p-#Xy;G6NbCF={mMl6&n3eu-)9**aWck^k8dj{dn( zj(*{22Vd0ScrG66;7i6ic-weyh^2m>4U>L8O?^HYAg~@*^sqz+qE00`U!_+ZKCE=B z$dbUhMEgtNZQ3sae_oeg;7fJ+zs)V@GTrLlIf~%RD}(6!L?k!}ws!fI>18Wv^Q6mD zW^mzV+vV3PprEBAzMS%+Dk|#0*eJ%{FaruZsLLOH;tx(}naeqO z3|Usx<(NeMM#hdM<|N(gFJx?pxMzsYDteAHSp^xIFqjxOjNIi+9hpdKY$n%igJFE0 zrA`rzV?Be$`BKN5qkW>{q(sUSdNQfds3bNe^oTD=OF}Q;c)PC4ti&)0G6{saiG~I- zjDxnzqC`XelEVpDk(fk&S)t94@Hvxe>s(G+DHg8OwIxZb=v3iw9R`B0O%!#k_welT8!)W2$Zvc%D-s(+!U-9*VkLtLJ`FasIA&m+QUvja|NM-ZzSa z+f*uut|h4y&$R1X{9D~ST}1jCz&wr=|3P<)Y-90jTA9GFj~5<+|2WCPe>&O0Z#D`nGXFeN zVD7$(|29|P!)S~zes8hk|6sYmo0$GzYaIQ`7-F6cT;^RREa(iWm5^d>!BM`}Tm zaDw&++un6dgSD&ciQ@x1;qNv&I*RhqHgpg)q>JY`w&J;3thj2P?$HH4rRX^3Uctp$ z)zA<~6yYGG6sMy2tD@~XX8EcX^IL)GAoZ6C5U$GNFA3LoIOW>l@S@^tU9M|Qp}0jB zU#G_q_DJ#d6+y&ujiMh&7Ddrr`~$7%N`XmHiU8pnR{V3}s^*l3SkXf+*F!|(;)tS$ zwIYeKUsMQPls=-Tg6!eqU1_1OXJL;H6j=Bls}G{hL@d9MZhRHrJ9GdWCYw@0#9(v- z-AXyJvdhtlO97|TDU!_2TaZwUX`p6HbJgV(hz(+PY7Ahz;J^nVv`ZUio(w% zy_9o}yseyazAtY}QV*sgd}}h@&U~Vw9Xj!Ie=Ehxn12YROzy<<7cy8=wB1ECos}}B z>Zv55B8Qg{BtbB+be+`I5>7IcJGQQLgRAq>jk?aqG0&#T!z)VZO9Q$@+$J3-<9SxP ziMrqNvxtkY(les72^>1$61uyZ(c6#_zo8KW&go8{dChF?01yd{d8@>8w{VJ zyBOhFzF7DNlEUt-%LQhGyRTRigse(RUK|YiGr{y4g$Uip9`i9v86O;;?5;aH4x;WS zX>Gh%?@qNSqPRA@PoiQROY-^ZK0g{ppjQlPLL@DmMO4w1&;_Y1)qnJoC6rEb(n=@m zPJ&gIPSJ(pf|O3J@Ptsc-35WVB0K7DBpSlfZ-`~GPPkKlBe9U@^xq7^61GsP>#ib= zY~hq|Rd^|PS87D2n%_=)$c|bM`OZKO`R)-O^1XTw`QZ=``Oz?q@Vu<_$D_iaZUw35 zD{NBHYJ$D(XSOVeE@bq`)t#pl&L7 zuTeG3Ttutc(yMeymhsBzYHD6}XM^iXkLwc6C89oW$}7khyyH}*mzvjEvS__r70DV+ zkSkQtelje4l7#ER1a;3FMd2J3y+p9-0{0WB8(JM#J73{+Z(c)-nw>;9Qe^XLzY2%w zK1^JAoax;J8EQH-L5?>anjphWhbGAIWLmlzK}IC?R9cXc$$FPEIyuZCW0HCvDQpeN zNiOBYq@KJ<%Gjiyya_Tcx!AFdPcC=JNy#-1nUFlkArq5Z9Wp7o%^{PMS2|=$@;Zl1 zP2MbsqPM@{wB#K;xeNrEo}}~rjEOxnl6QDmV{(UwH6`!yu$JUb51X0Xr7?-%Q<8f; zY<}|B9=0I)oQEw;zTjbtl6yUDaq?9UTaw)8VW%eFq>qT$WT|*swN_He_$vKObSQ!S zIVcA35Ho;#E4c+Bch!=iSnes0lJ?H#XPmBtg3VB{GCH3Xa5TENQ3JT(1B4d4NkZ(# zyQKqOHHdm zoA(&$@IKvNvXqcM5R|4U$o-~^~7waiNQVmH)WOPO_`)r`LCaAJo|EUe*8D{vNF-(y6O;04q2mXhb|7AYBloUF@ zASMg)kvXR#$j1qN&_s~GC(49PJR6wza+0FVds#se=Dn;SVW>CxK1h>oN%Q(nQlhZh zDNUJod6Lq>yrh*{FA8-4Q_~FSi;;oi&Z|ceQXHP6hOcF)Q7 z!x`>RZ1tk1!7R$?G>j;?ky-woi^e_{ndUpXqVTsK%L|kmJx5uhU6ezHrLC&$9NBc> zFLTN^H|TDc2l2Acq@_FN&7iV#2MWxstL%Ke5hC!GA&$Ovmf!1*zRPC+0K5K;cZ&oDPsu!d=R+&mo@AhbvAQc*$^laaHS_;yUrv6uJQz2O@H=* zI~_6LOAQT54=bI@^m=VSi!9H)3nKBX6al5@V^?-!m06~UnEobpDeyxA!KF^ihb%3DOVh?waqpGC?e zwm14cu~xoDw{k}LI%I0}H^S=@4U7dr)qv#aimE=ziu%qCg!N4ZgDdDRfp`p4YRtTU zG$XYn*_$vX^jC&aMKpy{D_L+flb|sX+Y~KgqCl+#$s(_)dXO8$tB>#o@#-VJLA?4X z+VGFsI6rTLMc-hE+h_DWhJH-9261muPrZN1#p_A&BE)3RG1f6XiB*V+p8DkucZog6 z1tf~4MB#}fPkdF%(34D)TQ5dmVN`B|80EZ?+(s}uhHm9k=*CyCx)Wy;D9sgqDTU<$M+6@Z5@4w5-Wd5xAF(*#@C^> zPA$2N)1qgY>jk=rzVxBzb`m-75arPG=zDH2_rNGQ*7AkgF5yeEU6iCR{*5y=hvC#x z9t7Eca;27XA3WZoXAGsefcojLS$?ukxf=2RSMNL-`ARW9XJlL$_oadI1Y`mVMS)76+%cjb&B(Dx*j0bKSWk z3GO2LGzRWrh6!pB!+cFtGo=7w#n!Iv(0dcTMRPNMQ&@4K@9&2x$rR(d%wk-}i!tZ^ z>oQAq1GhF;sv9$F<0clBp?4O2PnAJvPHZ7_W+l$2``iTo9LaQ8IZs^s^;Y@|Hca|1 zfcpXL0`N3|7XiFMz>IMFp5Pq~JQw_(0C8UN3i>-YTe{I*&@_NS0EQBf;oP~2jbxpU zk??KROzx&f6PZnqnYnoflaG_zi>^r$bK*QH;<@dJJ*IHhV+&^;QaI~zg|iMVob~v^ zS%($QI=pb!5rwmkESz;z;jAa*WNlLO5#d2IL)G*#<75NyOG6F6q`2QV9HZ#3fCqVYsQ4akLi*o2QZ1U7j6WKa_b)ZM; zjc5k_)E`l2tG=8z^(c>{iaFjPj+WzzIzufQCy(YC@>qBVJ?5;Z8!l29RG*YgP=<3g z=OvOl^=gla$AQ!bEc7O#+R=m;wez;BZxBs7m>)=%Cba;BC$$TRUe%Se@fF5QQfR>){M(t-6a#;Q7?q% zR5HPueEihQGx6`na8~2<^Elw}NG$Ym9;Oczx5HhkgV?)xsuWCHT}F>oX`*NeqmHvY z!G)ISO?6KEh^(G7*UQzLb9GJ(rieJ5$g|7VO5y}%Z8JmbEE)nb2d;T~P@w9I_3(aH zGq_1!k3LUw&6RPXIk`RHQG!O~FD6MvBNu=#j*Tt!Je85&4~G2KTQ}g|5B{90SOTH< zgEJZc{+u~9)dx3BrTh`6Nrd!HE7^J15keTtl2Q|FI~0OBhn@}9H7SWO;UdK5AeeJ# z6Z;(Rnb_xeYhs_{tzCVFdElWGB4TZy;j>T%9~{9{nY;BFwa9`eumnvV%|_`$^&P3S zaxsxGYa+qyAx$48h02CcP;88*pWyL~R_r{9p1uu=r#jj2i9$b(ED8EfRi?H+=eeTy z=d3Gwf6mp`h1M0leNbv^DN9TLM4T=zO8;d3G~=!GPuLDaWl)@v{wcSpAmWv&O!N8< z*Rj%fxYgcwxXsyjgf*n^2rH!T3D(bjM?316XU7;VeMedE_icEAsKGL}wC`s^qwF(I z*=L-xbDgqtJt~8<#QMG$J8gx5MsuGsqq$Gnw&@6`GOMFcdHY}x@pi(gY=7^Y{pz~e zmZA5}*6`l9xa#sjsV)&xGeKVXYe&>futI7kSQ~04+L*7IXk)%+k`45lX|@7trt+Fx zyi+s9dPh^W)isZKR@Xe{6h3CHu6f+)_CaUHZm0W6r$s=mrGKNRrGKN<(!bGa>EC31 zlL3lvBp7RsGj2JqlDapE-I}2_1nTk)W6eQyC=n`oFDK%npUySYuUs!$YO0KYs--qp zPv@XG7(^^as-@QNm1#$nagfl>A#{IThYJcXm2&lCTIL^~D;5e&gz;RZ~fT6ZpGC)@?wTEl3 z)*k+~CQ~i7gYG7f_CM%e$y;O*mv|-)3E)x%A7=Gr}NP7^RpHo&&

*W6>hQAfVpOHaOPkr`FTI;uXD!{gWtjc6feJ>FN_yqy2pEk*LEvlnXw;}l& z05>yVz2WO!WB5)$@+1H)02TshC1AyiB9?mGM~Vgd6Ws;)8vr%UP&xtVLBNU`!bKS` z)|M>*e=C3u06q)gasbx@xQzgk76jiRV9wKI5w1Z5^c|;CGt}(8M4lb|iSEP{1b-7$ zA?J|*h5;Byz|?*sR!iflXrD!8Gm;zW?`j`S3A8XdNzz-NFl>D%sRU&Uf@g>zz?%U6 z6F`Cnv=vK`;et@uT9LX1z!wM*rY{1x8NfFI{7@KLCz3?I`c5(08;KxdPX}-|fO83$ z`abss=ITMuKGorwK_x9(&l*78Fs@PpIxeHl8nX9t%Enjk$8-hX0C~3o*a6@^0KXu> zRq(B!SOvGDg1KU)m|V32WYn%ua#wKhKT~72qHNXa8k>U}W0#iD|BRZWg(uhBY{iu} zTXBuiwc;By0BnSuTSVMuy4URKKrQPfvGb3758kD_@OMYXz5tE@a6F6pGu?0<&!SEVb<6r2 z*g8=xW&~tMW;=lbas}F3&C|O1*yi?o(k)Io&~~>T8UH~8Y_B?}9__UnUTxI;+LYyZ zN)T_11uzZ3T%Bh{gK3Ms_vmV!M!1w{c+Tr&O@z()Xz zkg*GZ-UNtYhY>Kf)rjKy;Qfx;2e?`{5_PuvEZ>96=q~)<0&ow2p96T3fE5>!JicnD zh8cB7`~E>K{e>`BceM}wOVr)>jKOR)H^thA!`bR7BCb>|`)t|-x4Eachv(9g-tPC& zDqq(8Gm{k`)87pCb^<*xgI~4)@=#_bwijh;DVP$h;^GXP!81j*n&IMa(4YR5l`uhk z^cwK5X|qYgcgkjhOe~7;iulld5dAx)R`One>}VGMEHW~F=E?Y3B%1|#&vRwMY*DRD z@HES8L9R9Vs@FzBm6tKqqXjYi8qv%C;$fk;mqC~_cv$ER9xiibZScr&J5`5*Uby~F^t@9zS5b)$Q_CL4xIZuM!u2ICtvPh z`IH>zPxL#1v6`5SO5~{hRqUyd6)_p4aF|)FS z0S_@XdX(;!{Mks|^Waj6=q2X*m~O)5or>#9B^$uEpu8jB={oEMcM#~oh!61B)tRK? zQxnnQ1iMm;S^Cr-@BR*8_5m%#BD5fyOJLnnWFME%KJkuxbFQH7VsNx2qDu+Z3b;fA zZsersX1Wg~AZRFlx}lf>E_3m3D6e(g%ch|;+lJEY1$lGi;;uy+if%M5(ol5V&5GF7 zvSn0!ex#r0MEckLim$R_ukyrR<%zx86MMC8f4ZHlkXHt#ovcu+c&!kvqkAQP!zVn& zl^wVdn$}s_K|)989wF-ulY4~X6fw7Ylv>(Ak~CNMNOq;9P}SX~VQQ|*NZvGPu06gb zd(?Yk$wzDnA2-yN^b^yKCH=gz_LK4%uDuCvuZC-{>?7;8Uwyv*Hs2V0zO2@?S?8l8{x*R72#_K55dzM> zoNjy-e=8c;T4hWt{{KfPaCc3DeWR5 zx87q?t0zT8qUm8GNEv@cz?>INGOLs~MSUV#I5z%?$#XhQWU{`v7}bL!dX3cRy_pK; z%!~^d%K}=Kh=8$+O>TP7?nhAF5|vV7BazSCGN0}_N;da^OE&MHQ?gdJ&sx>zG3Qp}zQKicsb_N;XfEqW9}G%c-EOvct&C@($%?a@nbj zl}wQrmwJb*WD56svQJeqg|~hFA;|kgCy9)c`OrpSjjN#|nb)1eW3RM^$6lEYPh`F_ z8=lB~Wj0)oqDn!gFRxR804c$k04bA5r4dGBf40%&g@0f!FZFKU3+$zEWCg!9VS=Ka%uL z+rXr|c&nF}9>I1lxcwxR9Ggnb^~t=2rXiJLt5mKYqA zzt&j?Nzr=|pCFHTA9{nh=Pm|y7n-_@t3vwC)LnMJK7;BQzLgssy8;rv#gU%F^*b>zkSVD4&q_19ORZF{j4KuYL2G?}CAC`W!XRg>i^v4J_y=-azdowM_UpwG zmag9{mcPC6k8rlmPtS*Q$$fstH-_8kdwsf6ox?LO7kn3y3GXIjQ`P z5c?e7MMgb`$J4t@`Pxs9=P!@RFAF(DT>c9A$jIS`$k`!>mxWv}4v+J975Taim4-)A z*)*)}C>-|X_^>X2Ye2n|_;X-*h|K7!i6B6K0ILYdI8xG!{r~4gr=XR4M9F=6*i|xR z^o-g4V5S_N2c?#V6|KL6nD2(&M9d$d`)>deD( z7@u?0BiItQ(mDIVSmit*xOVEpVb*Dwer)K&;c(tqo=jt?IStb~fK1>k)f|?JaifSJ zz$5^R325b`n!-0Iq04u`M>eIzd_YrxJZCh?FB6Fs*FDsLQdfngGs?DKsZ!hbs#L`t zMZIg<8i|J{;PdHW&uB64yr5NbH>ueWF~NbnRVPP#)LI>Bl98;BkhYtwkBzpQtdEMe zo2-wAwwtVvgtnWkkAb$EtdD-So2-v}wwtVvc($9Yk9D@2tdDZGo2-v-`pI6!Hq$D_ ztCQsR+H0~-Z^i3L&iZ9k>|BvDldE@DM6Fonb6(BnNN;jy(=v{!>4VfX>%2EXGsI~7 zdn8Px?nsc-_HxbSfrsa!vgWeG5{0ZBZzFM!b`WvHVh>&Zrd$wnY^ipktwfbC-KEmy2S(%bB`BnYRoCxykhfQfzI`1!@9K(E;-$Li_1L?Wc%8 zypT5*savhATfO|ZdPTU^)A2QLqWCp+6)yv#Yw2Ff-bqJu^w&aMFVS4@Pb5V1%%4b* zluwyYhXk4L|FX+M?=LMyi_BkI;#qXG#C(-22>sTkZ252Hl+(;7y1Y(^meOC2(BXCs ze0_~qtZP&gP0h7iz9>ZrBL4YDo#lRHx!=ojzZaqRdzJH3brXrwUfroHC*q%olsKv0 z?{DGmSMFf?TY7iZt~!4|&`zFTllg^hz8|yk{S{D~xomhG=ne~eAY{uJ_=BbWY{a0&LS`C$j=o7RYZW zPY}!fP_>P27U^(tKRL-8Wx<>unc5^csHFd?1xb3P)3}q#bDr=LyK&-@WIu7@^PJF% zC2s0$6WY9<6$5xhE9DXY>c#AwzkAYNVQHJm4Lr&3NCVNCK{vWf4EH5Kq#Q}WyrSWB z59UneySc8UXKG8b+nK>EqKb%>40NVtN=iCXUS0RwI=yW(lan;$wOz#do7@|jCijV| z2WEU**%VP*({p=XP?=3*Z=r=1w71CSZ$;Z@^p@KHn9*BsdyL-d3(M|d+CKSEHMxCA ze4*E@^zu6|n_hK(`E4xAFyL0|N zm|uHxSa0MVB-@2xiAwKMWQD5R3V$vg=i(U5&n1l`uPkY6dAT?M^K0bz%g@E(m!FHH zFFzLtUw$r*z5HApdil9H^73A{Vt_D zHR<^dmIr@z;5rU@tJ(uI_Cn2;ncbnfnRb#W;-l@mLTNL0MVawRvzcQ(V;{$Bo3wqk zpSQ0}yUS>driJMpHjFYf++3`#Nl@dN$E}kuZxcz2p=z>Ro`>f}+joo8nxpNn3P77f zZ*-Jqc_oT+GZ!WEHK=iJMn}-1RkQNBVa4}KNTq&|?CYop5uqC3eL=k~=9QZ=-K#V4 zBWI?2^tPXMYK99fRTSULM^P;)!~5o~GynYq-n}HdWNn;LuWk>H8JzEIKW7OP{T z%IVEFsW7y4$pz00s5$UghT^#hW74@#Pa-0ko^xQku=l*iI)#lg>W-AWezU7Vvd}8> zgQ^+Y#aqA0$lw);baEVImXkF6-YZpx{ggq9n$h3qmO=)jT$07TyPTrz_DfZYXR~hm zq$pt(VcBfcL?n3b&9x|3$G)+H~J-?T?l zC&WxUA!b@b%(O8Dnf8mA1=h4ZopAhbC;oE6PWj6TGPSRMP~dJw067K*Tkiz}I@JA?>5; zmy@>Y2xhBn)m6Wmp_fVDsg#caXMoYi13pCKL zw1qa5u3tYWlg}jqZh9rT_E%|MMV-@60=A&YYP!Gjrz5=&Bz7=>8@uNQ^f6 z&LcMG`rhUSC-o`c!z3Mi~Jd-H!p=>!|mp!@N3AMmxg#J2n0Ou7hEpY=Qxu1pA}V*_z!@^ z!1yZyMb|@x=$$66hbqz4OF(8-@P$}<|A%NB!GT`*Ap-OY5HKrwv524gq3FdTMTdgI zx<992PZcGKn~(B!Nx1(=yMX+3D<);S|7g(_lJQh_we^7QJmW$8dB#J0ok&S}pbLxEqd1PR=!fHHJVw#4;g9&LMAd{zK7TEh;hTe7{gZuu`2#Q_hM#Pa zKkfHA$R|woRT>kh82X%?u&nFU3uGf>jLQCT1TVSXFe;_LhR zRL>HTuTf-hwTwJNk@)H-7Ujv_yLz%;{=(ABls0ssivF3R!!M|401a1}eBu5INj#aN zTdTjw(eo*qUZJAbR3n;Q@fA+}1VwYJRg@e&mD|=9MMv9JG)AnpcdBTbq8AOSD4n-e zUOX5YBgMFaQZGrV==UkQ>rzC;)M{Kf(|o?rndZ-IooV6?LLlQ`fBXe^<}Os)#G9E# z$_FU&qVGx(Av3}JrEjl@Pz}sq`EDvi4*5P@AbZL8(L&_czB@!@?(xX;vhOp6$Zvf2 z7RY|;it-s*vPDzx+8uAxVVayqczRqW)@Q!H=d;wGeCc zEw}`z2%jm%nql&@Ob# z_V7-3?ga60!F;cCO8A8CK*^G*xA(*p0bz&kDQ zP7A!#0`IiIJ1y`|3%t_;@3g=>E$~hYywd{jw7@$p@J<)rM2?!zYer z2czjkG<*0tGU*5rFKTm?W?MWR9g1c$q5f3=mQXla+n0+E_1E^N<0H{@#d_OgaYx1#~wT~4i1tWel@69^Ti*2wnCY50`8BF9DZghvy5zoGKc$eF>l3r z%V8@iI-E)--Ax3?Q8Mf`Q=zpoHw;Z;TA~}x*dC4HlVN*k`vHhuVxcn8` zV{Uf|Y9rzBa12U#`1N?I+yI-&<;qfk;dKJ2wt9<#`@>?16e85$Pufx~kS96?r>vTKj1cu%?ABoK3g_i3i2E#&0l zospYdsbo4E_FyEI3gneTsU-1OYM{*J!(&!iHqDah@HWqLme)L`HTAR!wKuh=jE?2P z3kd(j;ZHJJ>0Yy!$}r-oz3s(&%jr-uwoo3nwM9jH%j#0L*TyT6z$=4dIh5ZsF}lTj z|Cg27wS0C|lHKJ=rB#dAq$!ux+sOt`2u%>4tOj@S%HejH62ePg){rV~Ll)92!^4!* zqgC{_ZRwGpl#;qM6OH83@vMi9QhB)?+huFG{8I-{dEH8{1(#5`zx)j|@_XmuDh+fF z|MMA$rwVEcLSmKA?Cs>kaaq&mB2v~8uVnC++gSo{ z{v5p(yybS6px(Pqs74?WJY;v4!Mk5iZwc=loF(z*W7nndmfKl^Og0=T!|qi5;W4|E zL9E-}$}J;Haee!T!?oT*3z;E z;~99`aXZ2L>_S~!M)pz};{Buj*ox7oetE|vfr z!P;;vl)@}l&H`U%b_W^KWz3?YbT1hl%FW{9S~gyW16LI8Ik$rZBPs7HFADdP(V^VY zfj$rSh}2voO7@nuwCujbXc-$0D%x94=aOr)u~2TP%vL7>JTrJpIcf)@i74)-gtEAv zFci*4%kbu@reVpBgr&Qzkz~3|g;9;>jf0CMgArW!tc}FVaH{8#9hd;a6o4{k%(%K6K9^0@)0FU_{q)3#xv_!pRbS&4S>_v4?ggxeVm!K9k z3H3)~Wm+Q0Ekr4Ujgw5#Y??$u=UCQ>@s>OW*0X*h+mLe8Cf;RA!*{S?;_ear$ zmz>Tedu+bq=8qqF>&L?Jp-ebdrseBBcWEochU*rWxjXil)urqs=mH^t$NZ&I42+c7 z{GKv8mg`Y=yZWJUkGV@F7{u4!${hI~v$~Y+u?F_~3jsXlcaS2HSyG-kGUzF1Y02@W zi_26yZ#kVy_SkUthNt2^W_OUGtn2S&K_1E7ca>iqddn|0dgEBs6sX0K@N#IENV!Vk zC8J}x9{aSY9U}h$jQ|h6i*Ur-;$r6f|IR<2Nc*@E9Nmvp{$|Qu(wKi z%1|gL9PzL)QR8{aAj`3jr);>)xz|(1Lj49Z9!y@UpQj8C^&8A3`lIPG?u657pY@#E zT>_8Obx|j=7#>+T$l`7DR3wA9tS)7HtU-wY9`lz#=|sO zB!RcAvTPbkBi=HWk;S2&@pQJ_UG9j-ybh%gkD{;3bU=@I&0JhQzL6_#vxNFmgC4%t zrFy!|>@G44q{``pybRv5m&zb+HiRO>{pIZPNs6)sGMKx{Uw_2P>XE}+OXBGYszZwjVLUN;8+nS3tvxPLuJRoT zQ_u32p)DQ+FN3>d4HEHeI$6F&;WfLn44w{Hv_?9T(-~gEy&th?GI(d;*ba(K@r+sC z`@xG}=6wVlJxHqLFMG*Q42s27=;5TN1JP0J3s;tL@x7e9 zvUE8dP_pN@PKYu+)49`Q3zu z@{rlJ{L+ef+_#tZU;PpDbd)x;t?Ul;lGUl~WUAl86^P;%@s`)Abnj;^#S(bW?LWt)v>tM*kB+d1m7x(@?msezXi9RlbS5GH{W@o2#j$qr7Ezks+H)_a#GK zhJ1+}-dRXlp!$cuLUf4tjF*0U|8Y9cnF{5- zH`!N4ExqR|lsJ&~dTZB923t8P{5qz`pS&CJn5R%$H0JR=T%Ix%%IS}1pdfv@Y|^7| zx2%kXawD;U7=EwU(>jeevw6%^D6bF4hx7tG?<26hoQ0Bcv(WpO9NsRI`kmsTI+$2= z6DLzUJd_-$%_MVa`Z757Cz)*js)0nVuC98~d13lW*?EcNqW&n}gC0Rc^dpF0Rz{oP z3$vJ$V*TN4coF7$6_4c-B5cF(uC`cbTXUXY94{4&N8;HO~;mi0iGxkzv?M zL#t5O03;j64>044GMRW}Q7WArPG$)Urz3-_GF!F}g||c(g-1r0)xo7f^5zmb{O)tU z00}y9Alhg;O-kHS-O;}B>`?25#-{ex7K-=)h7GiTkH5^OsYTfzZ;DocCHn_BppeG zP|rwB@-TmJx+EjIGB$#~iubMRKDVPCvB79Ok<4Wlp?4QWN3pVGs1J=Y1&bVBMgw{? z(#`r|#1pZk0d2vnoH7v#klKXe{YDPL3?%RpL3EN43gz%vQXk41`9LB!j0Wk;85oM` ztPJ9p0;1`WXulEP8p7{<#-iy^G8W53vqokR-@gGLu&Fx@Z1T@M;ZQVTq*|c7g`y*a z;WU@Mf{UhSsyUk;GDN2+fra#;P-9nD~e54ZIbjzC{>$molP3CK5%suZ<}s8t~l1sxpzYr+vs$OhUo z9qkBbwip?(Ohk-ypAn52Xuekb{%lipAdb4rNNb|sz!jiW2Y!qM&3InCAJ3w?iY|jt zt)tnD0kz2(nfQ*Vk)v=OIB&?2MP&5FwiQBc%m`q!Vx9^i)^-kZi+<+DMpdYd`5`Dm znH|K9GInC38Ad@V{BAq+qHib}+0q>e<1|wU-4xFXfx8Fev8;i*c4oeexcD#6Ab-EATb z53S((e8Ec~et)ztncULWKWYqxw@1^m=i4cmF|woGcs=HD)QF@rU9u+;lGUWZ_F=R& zX-Z=v+ew-(Ri&}BE+0bOg!(jgF45&!l9ywt5y?O=!u^X4Ot#eG+`5|NOY=FFQK`7v z1vMCs;D15SB65uNUt_T>&*C&F%|JKl5DF#@g|3T!0_@aZr{#05G_ujiU?PbXYr9^l zm3gYV#bRusSt6nh&Q7O#XpD*WXwmc4EiPoNGrAgE3|J`iCA_9J=Vgdd6TWPPfl9&d zXjY)vB!0uKiL|*Lv&e9Gv~@Jwl#9ta$*_@P46hu5vh{&U8wEtGK=o)a(6~#HhD!;+ zT5=F&D8jlrn(HY4P*l=s4GRLAVoTFPRE$ef0T$y>u*8a!iEhPY970v4pgH)h9l%^E zsAfjw#*hAFhLYK$hNdYVRn0_&Kt?o@O2&US5K&U68#gdzNB7xs z-tTDa^;JZXz1n_86&&te@TeFvdzkmx8; z3YqK!ra&O9yA4fk8+$^V+C$yV-J!Z=Mk%-?w47nG2A7?^p-U1`ti7kT5FsTHC8fg& zyf`~DD3hQut!HoS+8k=s;!RpSpP$U^fn<6+r*G`&46SYHlA6}Cc|&7ITeDMAcMo*a zF{Qv66HW*{Do2~FYipfYQD+St<=>S^oXMr5$7H*{Xx21s>w+Xj|KQgcG*NJsmx3yILDtLZnWi)?US_7$;Uv^eE2`GnagAvcuWI zG)BI?z%^|cMO~O%TYIU@4K0mbETTQ7v#YUrZD?^_y<}gSw8Sl;v5CioJI*vIF`x3zk z1HWlw`-V*&O|4y_4I6vfHgE?OCAgv?J9B9~Vu6celOty?OqU(4J!?0%fcFM9vlPIl z_Vu(s=kd{8l+fMW*j}1rQ+wliCA>Q}wg4BlfL?4tKFqfCTXwX=g=cgSi>su~cYSMb zPjg30sHF25FX?{9c@Px3n(-3FV4PLDguX;&n7%}57%x#9##gx1Yo!Yg1KqhH>fCBv zXj8ILg)M`{9?mYK3kw%!kF&9!Y-kR3^k_i04s`T{x_Y`bDu8PNrm?QkyI3$+C-B=B zv}X`97?hpqdYDSc_7c0wzq*j ze`?tzpIzdar^ALgo{dK{H0|eG0e14H*3g=^Ud;0vcy41?8@aX$)!dqk=Axm#=wNsx zj?qaCn@kfsv2fGxOj9J$bLna)&pG7*ap7_mViMSrS)ONhiX63xv3hI_h3jYLa( zV_#-XI@+0pd!f-tV8j;1TiTn^h|x4iwl;RHY2H92It1&uxlgtTibpI2|HDupew`>3 zOOWl{+}A0*6jEh1wK@nZgP<^0ma!0mj$iKTk}KVOct&LG`x_l z6>VKa$pVsn-9+PP~rj%(a zhO}HtvOod_!%K*pe1=Djp1LCL6f1Bqq!GVDnu;-ZP7vIeGIu<|UAAw?=8vUwPW>d<@q%*BjjC`m$Wpt-AEm8QRpcY0dhnxQ$81YP(k9X7VK9Y&& zIlz^b8|cm^Q${}2EVh;{+Y{m8c%)lS+2CWG-Ps*#97+w!P*W6pILO(t3ANjh8-~UU z-%eMQ9Q+-P%_HF}1wa z1hb?4IeCyFTBD$OV(L*mXx^c1FAv={6mH3-hN7c#ciq$9-zm4w8EP2WeMSN;2)~vf zk?fGB<}m>jn4*Lq<6COFoa2a8 zJd0AHs2IAKsGIB0jlsK#ahH#!i_#FYr9m0sK^ch-k&{iW{295QA|)(ErRTgWm!Q6Y z+pZ&=Y9eh$U$7d()xja@Fc!L3P`yx760UdAZZe(5kcnwP6MSC~D~p8yIy<`6U{~RJ(fGh1`On3W!ze3+FzOQaVJGwsYb`fELYY)N(GJhI zLGEvyc95My7)9YbS7Kr<H}x@8Enkz^%~LuhYI z=N%HFRY@VDl_L?=%4mGz-;rw+u6`_Y*&O`PIRncAUV#+Jj&ieh(n4d1zs;R$M5dE5 zfwT$TFp`l-SQzJ-HeP{AqehMGMm!@%SBB#G8A6C6C4?$-w-=QlX6w9@Sa{E1eIygv zwc*@Q&uCL$t}O{Ku{cfYJ6BF@-O+)bWK;BP__GoS;~AynW=wgMf*#1=P%Dji1Qil5 zy<05ox{k)K_1JUK=3h*B6o@BB!a_GFfS$%qJ3Sl{ZZa|jWtP*H3db2ugCK}S;QveX zVPp+t3}I0vF`9?Mh+!boDOWn4BBL-Cj}G-`>fpnr^+VdmLpYx!8+m96KcQX}&*tF& zqCh->+JvH+6kbjR*Bp*Bvq=V3UP+=jaE$qo??XBIL|_Czj2OyB;>KV&GianU86!r% zk)fn97&pYX)C_6TV#&a%eJqAwu)|q3=ptBF(xPpIzeLhzN5lQ$6zo4Vggi&YaTbT_ zF-dJTa+$QD3JoQ5L`n@!LZxVyz~Y8g93k1tB80NVlQm>`havh!^paSx&;uD9exQQ} za|6*-cmRWWhmoP7E$nS>evEOrb#~z3OZI(;G8xe!j13B~1671kS6qpJi%FcRq~jyB zd7yrmNHT>zg0L?zVT6ZZze1Ia*ibGrNbVRkC61@%5{eR~@PZ_jOy%ev5&Si(>>*tH zfX%mc5E?-<9d#_lqoRwA;goD-W&^(DKNj>ftQ`_Vf+JLrd{_~@6K)FzG=c(-rK4DO z`--w5QIKIp6NzZYWGak)*QuyvnkiMC@Fdr#U~Iz+Bdd-UCX5U6+Z#|&>Sk!Bcq|o< zYz8+|F;sRKLK#Aw$`P3(BM*E;38XA&AbLn?)y^Sn#NZaR%gv;r49=j@;KJFBd3HoL zJz06QDK+}H!&<~pgr-u}kjuz4iIeYk>KU@3WE8_$1rl`Vi;YfuG|`r566O-o!8Y6& z<0M#L(&$zMsV>@w$VCn+z^Cg*Y7+(u`PB`qc0$i!eS`%dXdw?B!izSx&v)I~bS?r# zu}z1(Hrpq~LULE}Y-vw$%(qrd#3i|$;1-xBP}9tswODjZa|qD6jApWUwRs$D7Kb)R>2XTQCZ(##u7%GSdP2=9PE3p;HSSVaN}E}m=zKh$#s+Li4nlGsU|FO`)JSf_ z9Bky4)C+|nJ;FR839y>dfe+RJsFF-UVX!CCumBWf^kNaR6}ARbpDo%G9>8>m?KN%m za6l>M13cmQ8X?a&en@y2wqh2i8Cc}0G6E3_LI8G1@wTjzf^921>F|V604;J~1#?HlxC=6f~gtpsCWtj%xWr* z;aiA^L@|LCl8d55Kw{L>o{!dLI=w=#672b3%m8GCK@xu1n=%Gs%Asnb@Lg~l|c0EKUI2*~K{*WzN z2!>KAx;#@vXp0tticokDbn;>l+=~G&y%+>*35cPAZ7>1xEbmnj&$Cek1ZV`p!@|FO zE-Y}V{?h0cKn9KtTQovTk{yUAgvW%e4%{1&&K{ndEacso>4%j|Y$={{$zn? zEi4quY$nr64ox|)k#!d8?=!OD0Y1bFwKRzXdZSYZ?8U%eEDN;@fC}Ood;PZb7V@?W z`%i8sGK2CdOO|$_ust zR_qp&+l09w0t|%2z7j4rQ6T-&Gu}XgO|2clI3V*wVcAh~tK?${r|5HA8r?d$?XbBSbftAz49bv+jp^}8{+#SX}X80cE*=`T*c(I$pRmDuSCy7l=I0Ii7J-US@ zMxi#iOYk6<9jXrQWE=@!un2b!!A8$tlaZICa0MC@Zy5ee$RPw0`*d8r#P!8&8Xngn ztl;eBfgvV*JL*ZKP^xq;(E%39_MvcF3$9&B!B8KOnjLMS-DWzI>LC+|Oc5}LFPQ5o zB8?+zoQf-4dFg~uLZ5h<6T=R2q_S|B$^3o0 z5#fHfZ6#n}i+N7?RT5oIs1zN3AV8Z|_)%brARoxKupF4ymtO#{< z>k#?jXUN}0#57W1k5D)(zt<5pWQApJNmWP#A$=hrNxwF4r_ewiev*PBn3HLHFWee* zM2Outx`GapV8QnbuLfq-_z-4vbp)G15jZTN9f>%cCC`T-fj^bTHFA-!avSy`88|u% zbd(IJ2*_tntISw04VtZNIYnABL+D_(UmV-ynNV7u3GT1fK@)I?o@5aLN*4j7$vu}? z+Hwi_`{>@YxY@48XkGmZl#4+^0V+ZUF*<~sN=)|YWD?UTsfNG`J^`YKu_RIQK~WN^ zCMD3#aFl{VG3*t93-!eSE|E)srjKf#Lxv$t9Ab^&p9qI?2$54H2RWq38BB%ILUg!( z*=dwTJd4PY06b4lQ8h`><^iiQS&{Ofc@XmeceJP!skU@clFGu>v@L|rVn>gvIaCtH zE_+#wVNq9+TR1@}pS_*Py(hQQ)T~A*Y=ro1mjuad&%hNP>g&rXFOWSiR67MjMDP=e z7)|g2dTwZo*wz|p@}z~t?{OGW(Ps(zMgV#1aUs1lC+&qPOGygajEWY;3@1luKb`EC zE`T^z@D%Pc^PxQ%qoj|bc|<@INLy|kSCDfa2eT2eH@5NYPh#DX(hC^`d$D&f6jW4K z+#6IG`U=&Bh*%VHzz5C3DFL;1KTIX~BVcL3#QUj1JPBe0__^ zXt9NB7dQS5yhngC;6WH3qJeE0<;;xc$MiwXLL-}%2FC)TwuOdTL&@L%jk;oJu(UR2qg;LOLb_&;$sN+K0!noZFzc!8QFf3MkQN*RFei#o$a~4fN zy1ZD_Qg$Ygm&l6b%{M#U47DXXib@0pQHyv}Qjvh@0MQdv0M#snty_F36x~XDW4NQB zBv`6oxM4Yvmr03o2s=ScgL0H1MR=pdrBi5~bk&LmvL(qlHW48#0>XJFn~CQJn^Y1ufYMsegQ z#IP4CNbCT~P9Qj|YT7x-B}uiMBZVdt^+TE`^L)M}ZRW6xh=j;TCyq6!Mj706z!!nY zR+m#8>?3F=t_Y@u9~?SYOi)yNJ4;a|p;_XjOgKL@Vmj7}j|i}!TyWdVQ=H*G`W7G3 z<;;?&po6Y{bu@s(a;T%^ONH6iJ@U2`71$q*;V_YWL3D=WI9jOfskvm4VlCuVlug&d zB5F^h$y+SVQn}g4#7Io7mFsdCPE$k$4QZJ;8VbSNCidW>yUF(^oeMqLcs-Vq2q6g5 zqZ|G^@f2=O3b7wlfZ`ew41U^m(Dt2-Y8ZZOR?9*Mqd4z|B}(5(!A>4-U-AslMi>b4 zatLV!EVK=;!NC3v4k=m>1S2uB#Ft%AABqSATJWT;2$mNL3))WDCJ-AgHQIa1tqArA zYPZR)Ap}Df9Ad*)HUL+=2+LE@Jafu~1hkY2;ot~g{(^I#>{M}}CPFd?VdVIrCs{4= zt)v{VOejKf;$SL-8(ElkaV`pFNJdDq6m}ae^yNyb7_N5Xe{%4|GaLHo0yBA0aakj8 z;Sd#D>2^PQswFzo495vX=Bf*JaWo_3r(4Wepiq+7WGu zW(5zpp_MB(KMz6W`CEDLx)56k35*@aMPy7TI+Dwv+zi`Emr9+qL;NK%Tmd0}wBwND zK~g+m#pEvCoCYqP=I4bNzKKljAsnE_aJ-OGJmeg>L1^@+$dI2FFjGjYM%0d+4yqZU zsCH~C;xxQ)Li4%5lvec98rumTPuaNC}A}&qFlj2?= zC62^!-b)8UxZ)uErD&P_1uhk$FW-yQw&c0t4i)JjV{LmkZAZyc!$gA%prdTE|2r&Ho8X69(Q4$wKsKVs)H0&^0iL%2G)b_$Sp40VF~?Krjimbc^FLY7vr}Ho26qldky?ci4%e=fZZt z*KNfWNaW5#sQkuQ0R@X5S?w$~BB*bnu7Z=jmXfs`z4l7lX-GBXnj`4sNe1~rvFgjQ zxl!C0&s#3ktMc|b0?o~&@Nm*bcpPII};(bTx0tL_=%dk7pvNV-kMRGfDO zi1Tt9+C|^?f`QhASsNB2y>W!QAIE+|ufu5^?U7-Esi+l)Ga`Vi8U~C59cm8Pln`_L`Bh4 zTEPe@D;Pn=f$sAQB4HKhzYj_dvp5$1W^ja^)H<5QRYug1B5b9l;9~`eSe^J5(R+>3 zRamaFbmWH{Vc^9HkOhQNY?paFk(GATX2slxeu zEmezUR{y7}svA}2#;V1FvIl=3Q+e>*tjdLaD7UGqx~XbmQ`O?esue9&oqNVy6S&s8 zuHt(0eSUMfS+xReL^`NQs>Z5dV^t@yBfe8nfAwim;ZnYhRjciM{oinAyIQcKwj5Ht z5Vi$H`VjtJV*{^M;kPgM_Nui*Rh>;$y-igYuBlr6?y40{RjZ>_Yn!S%*Sd;C_57zQ z1K~kSh+!C|<+W5@Xs@Svrsd4_LgGMtd;AoVpW_a{Umo#0^A-IB zCNjfPerH$RTTxVj%f?qdTyb{QS1Y=ZV%GW)>qV@o>dA`6svlIW2kPJDRA?hoMnK)j zc~K~mzd$xR8r7NZFtM!-phR?ZHtBLdfEijA<;|6G(&*%F` z)p&YP)$q?(iz~9aCC%WqYTm}{zra}h93O5;CkATkPNRuk6>r#OF~q&LOwAxki8q9S z^CCK9N=QVk#JKuH$LK)NP)wtdU_FE=l0xJGKwE~Ihyeu>h%oiYlCn|39G0{Q8#j(q4s$9(KZ6toWY`t*`tm{7po2(E4@Ye z#l&32P-=umjGN{=$^5nrQd|&8^){sxXAtLLZ=cCYG;tdC7S$;(NStE5eL+Q;4x2e@ zaoDsF(nzWNXqo z>#TLw*nm0ef6DTqgh~EdpZ}G7!8y5bU+q1Zu5Q0=?GJ zf#C7hl;CC7_&_j=)Wz2Lr6_hC;vdQR$CmKB8~iHAnPdG+eO6Pzf8u1TvgV-GLK)@XDKb2$%R$G+~R!!hMtBP7|oi!=&hIPyh)`UQfbxa^<83FU5OR|

#r#tA?$Y!a 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%0DJ|SB1s14L!$x-n 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

$+d~WX@DPuZE5$68d<7$c+Mbwz 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 z zD~BGhDyS2Kya7B3`B`{+^1JZd~+ zA`gbIBwq{PMt%T(nEVd>68Ts71M;~0^!9!r_l1Y65_-Je!{d^Fg{L8pxL@Bs4|!a8 zDRN(UE%I#emgJ-0J;|rShm+5TPbFUoUrN5?Pmg!mOnwl4ko+|KBKZyY1M=ta59D9q z;j8NPM{%yy`+Rm{K1U;O3r|EY=R0Z1<-8^*xt!PhM&2Fu%ahCbPHl3z-}EORfI6MX z$H4>07sE%8FNFt_FNe<~-vnPpF6Uoc$mKk1Ke?P|og$a>tgGa5p7oGi&a>W<%XwC= zYN5yd7LHfHk^8{QlgEVDCQl0YC(i`$L|zCUKwca^lKd2WB6%hFT=IJGRpguCTgi99 zkC88epC|W+-zM(~e?dMH{)JrnAwu=g<1!8TIOKESf#mmaoD3q*1)oQL5x$JPFg%2O z4SYAb+%F#^---NH@`Lb)2WywR3uStFY-i*93>U1J61Mf#(3qFcm#&;@t1LPNxw}G!G?+V{ZJ`jGC zd^G$L`3(3ya(UeQfjk}Z@oRa!i;PPgcnb1k=+7+Vf58iq--nkWe-5un{t@1cJPg{? zi98B?6?rV27i@I#?c|Y>KS&-8eu?}R{3iJx_*3#4@NeWB;bCigyo>bzLU;`F2Joch z?co{8V_W2M)0`g zo#3g+2g7rakA)W{p9Zf)z8Kzsd;`2K`3`t*@+0u!V@u~ zUhsb8&EX@-hob&A@+!#hBcF`?N%FbyhvY?2=N0)P3@hxKg(Ay>Fi3!N%JTX1F ze4bc-aybtzOD^Y?b;-Y?oh`{d*sgBm5#WQ!mkrR{GnPCi@-xX3z*mwdhi@nMg&!qP z1HVF^6aIu;UJv?AF3;OXY7lx{`Z ze&ijHpF#c;zJUA;d=2?c_%`xa@Q36TkL&GvLtX;@i98?t2Rw{(^BB5>_cCfD{fpf1 z=f9wTPhfZ!hw3HLp2YC%4*mQ89Sm3b&B$jmT;=8eFXS~`<miP)HGb>t0mEO>Kd-{@_ysyhO7K^7!TB!2?`Mg9gJ zrLq1&*83SApZpixmpqcXp|fNmj|tCDUI1Q#Tt4@vrr|MlY44>!T;_i@%>RyttMLk- zOy8)h;c7m}xc4_)<*Oh+*l?9^{Fkm1WVp)DKz@SZD&HLWS%#~;e1H5r!&SZm@@vSS zU_aVHp6ZfwBWF2AUIP9Xc@y|U@_z6S?($H9jg9!Iazdl?LucDBSknP<3a=c|IoJ3FyzeUCRzA{e?SNYz^?>AiK<^KtuGF;{T(mEH;a?Ws-Plx(9$>o0YIb7{NYJVy3{8P(! z@-vz}k(%irB!3$ohujlZ{~;H7arkfK{ov)uSHk_te+#GU_aI*iA4k3qzJ`1-?%%hP zuY;c>iB!FJW{74ye)YEydU`(_&D-e z@cHDc;2X*Rfd5H;41SUPD*O@oBls`!_wdBcJ>EsO_ZK`5d9jjQ ztaEY6McW`=zco^599nASCjYhD&+(4xZve^=wK@=wz1-+c^MdHMf$@eEh_oEdaJk>M)80QVPZ4fp0V>U>7SRbKvocR}(@ zs8iZ-Z=FoKPI<#somI%!HeBVGAYb2bmH!?2R)(v5-^|X1v$Qi@eDlg|LXAM{N z@1p)y!&RLDS)B`Kc}_k}6?2vke*3uW@{X5pL{4h8~H4_ANg*0ee#R&j^tn9!^vZY*X^4@ zo(H~xydwNh@~-e}x8$O79DtsRK zSNI9?Xc2Y&%jB8iAIXQof056ICu|$KA1=UilfQ%)C6A8%v<`VCcsug;@Sfzs@KNNu z;fu*5_~>?@Cr=K)NnQm05BX|%=60d`VK+P<`E_`0@`91|?E}bb;`lR(d?7r9{4V@F z`R?et{!Q|u@F(O~;P1)*hW{XM5JT7ZX&<^DmcZkZ=fsm|X$+62Z|c3w1y{#^b$p(R z$1{ZtSI6@qIlXaDQNvYU9?w)TT;;DLU&U~hKZfIf1H)CmaW3b=S(+HG^5>9mZ@9{D zN4~S+DleZi(9dv{pMd+LL58dR5!4SdT;*e+{SypVd3l^L+i;bSliRs)midOOyxiZd zCYQ$*JK*a0ug2x8^G_`o$e(KV+#+wFZs;se43DqLd-*q9#&;FQH(UoD62FOlh-tXm zuFBZ1xQ3hkkkW9K4@5qV;VSY}m@|%&*W4O29t~!5omg3~nZV^6SaZp`AMn zS9PAE-}V@;>d5>&PM#a}FB_iC$;Lzf%{E-+-ylEVaFv(+YaMxE>_>kXuIe<+=Uh0; zZo^fb;>aH}T;*@%S80#ul;J903i+#stNfe-D(&&yG+gD&Bmb1VE&Pk&>i7`LM^$m2 z|L&}>)%;QJ2ajR6TJI{f(-$t|*ihfxlZ*1V&=18ae+2nDMiGy{iU1iFXW5h2@O~6iH-JWf~)zX#t|>$dJ0osKBuxg<&WuRc$$*G zgAXMygn1i6^~az+JIK$$4^y2AsDF+;0QJ9+PliY7rf(?Qy8|AdJQntg{N#h-CCInH zYm>i(cY(`(G3A7AM}P9A@R8*5|E(q)_3;wBx6ne$XT*ND)^IiM6)+Ds8m{KyQp~Ge zhO7K8F3^mkMYq*S80rY2g!`1fA!}j(zTy5`KY}Zi3RsIX|BMmqE zbF$$o-@(thaF*$YtGpZs7L&_yV?DX_=PtO~e6_tboPTOLP5Bj=hu4jKavk+vKBatF z^v_4bRr_!H=^K49-0Yw5J@nsIKdb!v68d)^!_EGQXSmAyl+yV`hO7J*^nXUU+FsTE z(K_xaN`4kzog7aqc^Z*_K)wz6Xw0kbF}wP-i{) z9rzCNC-B4MZ%^v_=gB|7Z}{>y6k`uP2IgrN%1)@^Q#B!BdbofM+J( zj{eC{9)NsF@@ep@;)g0%fTOz%lBu!CYR@RzmZo)op60a&j;Dw8050OiOFSq(~`@$ z-VxrIya&83c|UkB@}clRa_NV0wo~ z*iJ6T;RECg(azK4GOwa@pSRsj{7$ami&qry$Rac4i`%e$Gpt z4S7HEobW2-vc2`mW!zhm%eZ$Tm-h4{m;M<+{_lJsm-#%0T;}r%@@m+w&E&FOd&y8K)|LDC;2$%EyW*7Az(-@w`p*eUy zCxhYH9Y1nS=kpk@@(++NV7SW5^CzVYSNSfbb)9mCtGv8lw3gv2AFGVc*E3w@<@Lmt z`A^Af1E5lVg_oJQf4Oi`ag!~V~ zRsJpVVex)mHQ!XeKE^Sk;i`X5qJQETuJTLpL~{beRsO{w=fYXi8?M${J(ia}ISf~I zk$cYu`&AyNULbhO74MkFWib z;i^4fk-tTLrK!$8CcoHB`y29I{@TBg&u*?g4Caf>!=Wv-MS^GTlv+(8QTc_y! z2J)b(+IJc5o#zR)A2eL8xArvcr^r)I*M6Bi!VK-V$1DX;=eC$9gUEBY(e+1>C&CLSlgMAfXOVAjr|T>?T(u`KvGxsytM-h;`xLj6*X^M5 z`^kUnsQoy3tWMf5kl%pcAm7+o=O2;}@1p%3T>5_<_M@11JSFp?URRw@K|UXzfm~ka z&S$vlAO9q}PBFt(|AfQqrsc@bz^jvQ!RvDk$j9LIn>L24_4*~%>+NE=T5m194$+r9 z1)h%%BoB}0E9Lnx>7TRkDU@%H=dJ`RtY!w2fW%l3}OB zaF#5A-Yf6>LsWb6VP57XkBjydC69^U%aVV_@72gJ5A}GL`s90tX>Sdeel8kbdl2Q9 z57$10{3?7dd9M*Vzl=QYNbQ^8vfg@F?@7wvMV+gZ?}+?sBd_{dPHsLKuKIb*9Q8+! z=U1Tj>fipaHCO-cgMN~6FEmekZ1U*ywWly#t@myU?dc6y>%EG64)Uc7biN>Y&_eAc z$ZIdsUXlDUycYTN#X8@Z+<%Go*5qZEYVQRP(fP4+S z1$m!fo$p9~79L=@>YqiabbbU}+Vd3cnM3)z$S*Nm^=FD@y3ShiXYeiLXP4`|9Ji#O zm#)x$!pM8)Rch@Q3|H&zvQqmE@7kTlu+I?`ml=eqi zr#&|LTez>`-u_Rc^BE0S+m$9ndoJ?!@X~M@uRJ>LsYZ^6?VdK|Ez}L2r91f`_yqFv z@D=1y!sc}@)F$##sI!k;wpZRKCF3Ife1-Bd z?hnYNAKs8lKm0>3{TT`O+p=C6uejuk(f*X=YvEbQrQZsW%lke2$hV?SRdVT{hUC&e zZOEm6dXP*13?`TD9Y=l%?U_n0?O8xBuluhimv(L;m-g%d0nO;xomG~a(SOab@G4T z=Rhv+b7)5{?{nxw9{HR;J`X3Cewauu?Vn99``t2fIsR-Um;GfYxxD^+m|W)1IdXaZ z_a=D;Y}Ye#*{+Y|GLFB-P$)$fvl9$DHRU?<} zYDg~I)tX$ks~fp&*8p;9|7h~|XwP(VY0qMEY0r9cY0nOFY0qJDY0m}nF=)>na%s5`BxylC?c*A;SU{{!-;XwN%x zdA;}txxC*#@>qQwm3i_Nb>frD`|VSa%ljg-k<0t-3zN(H>dV8`U=HAChctvSC8A}_2{04tNZ}u`x>tDGG3#|<#p;QhO0UoL!1j|nPIr9bN!l^ zJxdH%`R7>g3d2=iUT^)~aFuU(PuJOIxXRx_{R8BkHtPHZ!_|52xis2u7_RE4_+9%$ z@>cLys-^5lu`==Ihh_lGxy%RG4= zS?2>>JlLqC+Ibi4oKIdoy{@y|aMk`Xc$~k1JQ9x2yWr9u`TU2Il<&Ap*S|y_ZnySZ zemPvmWr~mX6GlFpL;KMW7Y$ea&=KQ)ll(dS5xIPy-D~pCd-Qt$F+7_?z8STL zpQx|p_%L#>{yjQ*_7{dejA?~(NHiQzJTZeYBAGhFq9 zUnZR|W4P*vna8wOC6~_&tw(5PV4*<@+4QZZ-h&KjtQszBIO^U&Q0<~XLSA%d9<_I-@~Q;In<99tp6_K zRR{URaLM0CK8KN4{pp)o-@bt1sz0k>yZp#c!7Gseg4ZM;b5+-GL@uA>)Xs3#oA>)WaMp!)MJ`ZK2Csy{E@)44?Ck?w0xMLq%f9OQ+O zFKD=TUa6HhOHsoWbw<7-T>7DiH|=~rIr&=jPgnAX@S)_R)rLFEZ1NTGW#rr78_CbZ zPmm{!s_Q=_uK@oIM!2Z?OaFxG<`~bsM{wMOI4OjWi7~gS*tGv8Vex~6nKkb2Y;Vg3v zS9y6}Wu@UNU;3d+JLjE-tNc^6XS?AlU*xe$JD*2lxXR1(14j*4`EJOcG+gE7efw9) z<$e1P$mMyGH-@YI!e6b#S-u#q>dW&X;ir24?0x@_%7>^6XNhdMDsdX^jBdE9Bk$W! zZn!EDE2neeEa?qbb-sP}vL^?5>o3|1k{^JVAdm4?=c|#|hu0?`2XAh;YG-w{vyI`Z zoez=kZn(+^BHzbwmCyUsxp0>LhO7RO_wA20T-CXoTcw@PB{f{t8T`!4o_XZKFSRcx zulZX02J#zkwC^%pt=Bi7_CtoN^+tN3{WN*sciR6VFZ4nC9rDW`wLc|q`bqoWhO74Y z7tsFGaMhm7-?T@Xrmxj;M!C;F`uAAm;lFE7O#Tv{n*78MozG#oYESio+6x-4*8BTU z?Ip;Ae`&8sKHj5_yw3Yf$$N#--k7{*SnaLJ3y0I*g*McxO#iF`GDC;3hIQMjzP6W06M$gBSJE97mC=dJTI*4W}tk^e7a6f^5^hEZ ze%7d?+LIIQxoWs-k8ec1-h1RP;Lpj=B_ADIuXhW1=Q!H;ke7(7{eKd;4As~sa-;BI&Qtj=?YbMj)oxE^z z?fuCUrO-awaMhkg#dUio8LrynNvZR*$Zx|JlVA7M`8DJRQfc2zz9_Z!-Q;7^Xg>~D zzo~wf?`3#J`EF@-{uB99xcvVo8Qm6&jTJN@Ey3SPc zp~bb&BX8@ceK~pV652PAAA)Zu?^#mk_mkHsrTsX0fzsNq!qsnTK5WN+_nz{%vEThe zp0>KK6MnYt519{x;qeSt{Z_rC&LuZo^;^aCx=woXjQF6&9OP*;>U=@+XqmK^Ab$?8 zYPf2TUn$+5x`wOvT*$2JG$RkmqP-pYx~$r}lTXX0y+3)6?AnKuH_V|u7_NR(<8lG> ze+%VH=G6H;fR|xp0=JaB0s~wC5+~yCENOj=r7DhnQt_ zJ7bbxhbJQ6UsmT+kxwh9J-gxFc~wTQFTdex9GjKb`Qqf6D`+oI9;>4E8ss{Ax_TJW`+m)e)t}~syGkg_XrPTZ>pv!nRlW&9{ zCO@ysdv24@jjC_(i+nuZa5cW0F^(S% zS9$py49`4$JK4X!BOl&ym6zw=Vi~UL=c=g(IG*7uFVBzplFRdBS;^)3vBGdwRc&uC z=bu_?kT2HkX-tl%VLWZgW9w#mdXVGv(KCp=E%IZ?XThhEABQg>{{~-8o(1O-TgV&3 z_mNM4pCI20zfArHewW-gobI?6V9Ey!hlb}?KXSN(BZ z?Q6JNuRMP{+;Ei-Deqi3%NWB|`+IlL?H_Nrsw2ETSeX4<4J9}T5s|Cx=t4I8u((EyyS74 z=zLM~z-HPj8m`vsTmAoZb}w*_)%D%S5BC5fL8(MR3{}>sNP{Rw1q~t)1ti=w;AJv9 zJG)uf-H9`^5L9TW0`W@3TSQv|^%8FwMQcPVX%&d~h_*y+C6CY=rI*M1N zzPl%%oq2q{o_W1?XXictod5Zsd~?3J?Tni>d>%65ZrtlX9H^9GR-hhAM<9_@t@asO|{kDitbAFMZ_pc)E<~^_F$KM4%>XY7k z@V!6f{Ri;xn*Rj8@@YT*LHK{0{|o%y&-n5G0sri0z3u}ejTUYQZ|MekF|5?}X z-GAf9KLLK&-+F%v{9^Ot%-txLpVuB5{uO?l(VTwTl`Hw{&9y&i+n+5FcgK0ja#DuB zu;TaUN_g^0?|%k=)chUryWZ%>HzMwiPyE&4U*X3s&FQCI=jZpn$&ddO{Pl14emneS zS9!k^p19ik-S7v^zX$*FpZf9l!{1T${*bx*${qir-H!IYCHx}%(DgfajURs){A1=% zf)C775qHODY{%z>h`a0S;6K~TO&7cn{`cmm!S8&FAAdHy{#Nf7N8HWZFHAQd%tzeK z`_us&8c$fF!*6GD|<>ZQY zdp{6<%MIS25OKFZ%}e~{kB+$8pSRWh_@~3SyvKVQzHp=W7r@VYulJY2cfQa2S@74r z-+RH_edUhxzuDu0C5%7)1AhF~@Nbx35C4sM9sb@A`t5uO{up}z_HlFV&jI#4QWxWY zY}@%R#y{D{KNuPBj(`0%;a}m$!x4AK|JvL9{yYlLf6n{w;3u`c@Bf$6&F#v=L7(^j z_=vlC%dhq0j*PgQ_wQ`{)8Nf7`0YF!e%u9$ z@YBBReXF_q%H`x4?t~eByanU$x7*`8;ZOd$-_HBtSD1e+;_kTRUpL)+a9hOPajRHP zz6^iWhy3=t@bho-{!RD`KkWTJ_@<9|e<0#+f3mOl`}2#4yZt%)&;9r@{F#5@{XgLw zZuY+SNB#EHJCAL8KNz05#rxs#*c0>{dO}LANxx`{!IAw=6U!X<`=`S z`>5Z}M)-Hkmm=&}`-Zz@5WG6#E)SY_A>wZQ zM{WF;h`aGx?@Gko_!GbDw|_;%-T0qh8~zo3yd~mp{3mSu^$~aDV>LHAd_QEw-T0r_ z_zyg~wEf%xPj2)V zxFX_i|DS!2+k^1=QTT_<-xYDU{i1E>0}*%I`41a^GkpGDzx@{c4)f2$|EA~1e=Xu} z-lom_ZFt}OrxADi^90+@FC*@@6D+vD!r$W;aX0>VHvYHpSAEm(&%U3WUToL>?T?rr z0>9R_^Q4Hod9ya}QzP!?eaN4T`FWoQe~bBx;V-v&&xC*5#$Raewwen6oZ~ki z%tyw%{jA!4UK(+?pO=2yUtk6PH1liVZS!}VYu@jM+j1Wtg=>GlhwXg#JAU4uV!S!`^=L!PD09mzwXoecATUinu#I588SQ z5qJ9&-xU58e#}SQjemx%>r(iV`4#5c&u7|xz7L);zXNU$BZB*|{lLzv53Do(caiaK z|FgFL`+wT4V)ye@M}5yvd}zeo__B>ZJmPM>t2XbG;pf_Rjx*PK@3(cm5zXM)0zZbs4 z{73Mr`7huF^IyX^ng15P)BM2p?CtSO=6?kL%)pO(3j7fpe;oYJ-{i-?0RB50e7pUt)eY{HTuK&JW=m z%>NgBlWphU;Y;SfgI{fa@aO$Jx_w=5{zUlQU-aXi4zJtz=fOX0ej5BQ&0ht7zWDj^AAnzE^ZMESn+2z-U|FH_H`Am_1558Zym1nHsD%s6R!2P;974NuJ!idTCet3*NfIWz<8~92-oFD zaIJR?*Lo*#t#=xP@O#=Htv6kaI2y!*C0k7>OzxYiqoYrP4$)|-TDy(zfXn}wfc*Lw~= zXP$@K(@Q}CzS+hX;g_11;BPQ5!~fB|0{@kH9j@cqfNMKV_%ul2wp#Ef+4a|r_+!Fx z&#`%X@OPW{;WwKP;9s||hw%IC>k<6ueQZPa+3j9*e`4^{ZFn618uJ8P`=5lLY{wx5 zx3@V2Y51A8-x>Hd=2^Jbn}ch;MYxWC39j{);aYD6uJu;or`vjKaILov*X^MJ*Ls_9 zt+xf&db@C~w+GjH`*5vy0M~klaIJR)*Lufrt#<;~dV_s^z?4s|HwM>wlW?s!1=o7h z@N@0@%D~Sz&%{|WpuJ1O{i|2glTQ20zEXuEW27fZw48eD4Fj zH{pl7MTZ|P_{HXJ_^sw0_(SGh_#ub-?f2km^CA2fet0l~>$r{KI&KsAb~~Pd9S?Wd z-SPjljf=r`+~RN@w*>qwJDzFyY126x`kpA7t0@9Q^0Dojm-X%?t2f znwKN~q|j3475K}|tMK#9Yw(NAn{a!(chG`AWaHcLk$DIHuz5e?M~C)4^8x&S%!lyD zDi833?f&ic-p)Q&zjfZe`a2Xzumk6 zf46xP{ukyg`1kDm*@i!0-hl_|NBC3Bd+@AzA3kS3fLG0j@SDv?@UHn7-Z!7X|I2*( z2DC8u%KzTh<1zQbNW>p&9)}-ko`BzEo`iqQJO%%?c^dwo<{9{Yale0A_~XoT@Xh9V z_#4a%@H@?m@Nbxx;C=Hl{2$FL@DmR6`(K4;&1>+tn%Cj)G;hEg=1us=%vbn|TeOHI8?;3FRT@$XpYr)lbZMgcb16SX5;p)2{Tz%JvtM3MI_1zGzz8k^ScVoEv zZUR@|O`miQGpRhQ?_$<_a`jytuD(ma)ptp_`Yr`m-)Y^NSACbkc=er*hsLY#au~0^ z%fr=o1-SaI2v^^g;Oe_FTzyx8tM96C^<53FzN^F4cMZ7ut_fG)wczTzHe7wzfvfMj zaP?geuDy5cyEw+H?-FqJT@tRo zOTpE5X}J0>16SW=;p)2_Tz!{^tM3Z%Ype&0aP?gYuHTDYg@4ETt_D}%)#2)|2K-;$ z6%l?k;eTZ3wHEv(=3V#?Y&$);w%>Uf+V~_~>rcVe?|L3u`=fr(V7&T03s=AA;Oh50 zT>V~vtKW-o^?M1felNq-?-jWEy$V;q*Wl{+I$ZtUfUDn|aP@l&u6}RB)$bj+`n?NR zzxUwk_dZYMetKU;_ z^?Mqwe$T+w?|Jx(?0ND6T>VvqtG`Nc^;a3L{;I&$UsbsJs|Htp)#2)|23-BsgsZ<= zaP?OkuKw!4)n8q>`l|<5fA!(&uK`^BHH53bMsW4l7_R=Bz|~)YJwK$}s=s1z^;aCO z{z|~rUrD(7D+O17rQzzY3|#%C^Nsdj{guOb^;aIQ{wl!LUq!h3s{~hnmEr2I3S9kF zg{!}6aP?OmuKsGk)n84x`l|(3f3@N2uMS-O)rG6SdT{kuAFloyz|~(vxcX}Z*X?Qy zSAR|5>M!+%@{_f3F?;+ZSAWIf>aPS`*N1vW+fjd|FkbtShO56aaBVjWSAXT;>aRRp z{Z)Xgzlw16R|&5ED#O)Z6}bAV4p$#F;Oe6$Tz%AntB=}n^-%||KI+2NM?JXus1H{k z4dCjdAzXblf~$|laP`pyu0EQ+Ng{llt-Ps^V)i_@TzwRWtB(?J^-&V8K1#vWM`^hF zC<9j?W#Q_h99(^rhpUeYaP?6Uu0ATk)kkHx`ltd|A64P%qZ(X&REMjN8gTVd6RtjL z!PQ4?xcaCAS08oZ>Z2Z9ebk4mj|On{(Gada8o|{^W4QWg0#_dehfkko+LeFxQ4Fp= zio?}M3Ap+w30EJb;Oe6^Tz!;*tBX-Qt6$P^^-Bi+6?>jA3;(G-KbC_Z zY0tOj;X2R2UkA(aOHCVS3ZYu<#PmAKF4t7a{^aB1NSDy@I&`Ql+PGk`HaJr&jeigOv07V z6kPdC!i*`O7!j-oXTzMPAmA468d7HkeG?HiKE#}^A8gb<< z4p-h1aOEutSKd-^4_Dp_@MSx{72(QT39h`A;mTVDuDsRZ z%3A}jyfxvgez|;xbl{UD{mRN@|J}wZ#lT~mWL~E1-SB7hU`;Ea9XY=_qyWbdtUt%7I>+yI3p4ID*@O$k%mV)c?X&SD_rx~~&pJw5D ze42yn@o65e$EOAO+wA%MB3zG;N^m_ss=}4G8eDm+!u+ z>%x_{9$b0r!f-7%jxbjwkD{ob}@>YW%Z0EN+TzPB2mA58b zd27Lyw>DgP>%f(_E?jx*!Iif@TzMP7mA4^Wc^ko%w=rCKo4}Q~;KYZ^ZzZ_$R)#BY6}a+Ng)470xbjwqD{l?B z^45eaZ!Ng;)`lx@9k}w=g)478xboJAD{lk1@-~DkZzH(!Hij#26S(pg95tI~pNw* zUf-#}_4-Z~uGe>J@Ku|)4qveQbq)9p=1usV-LGrGtLAO^jdnk(1K0EaUAUhA@4@x_ ze;=;r{|9hA|38H5`Tr5TV6Rh;;d=gj0@w5B@h8vbS@}%BmCqzx`Aor;&oo^5%)ph; zEL{1_!IjTET=^`(mCqtv`7FVe&oW&3tiYAeDqQ)j!IjTCT={IkmCq(z`E0?J&o*57 z?7)@JE?oKS!IjTGT=^WpmCqqu`5eKO&*^{4jocqr-eT@Q>qcC8i^G+-1YCJb!j-oa ze2bkY({SZ216SU%aOEurSKjh)<*fi$-imPLtpr!z%5dea0$1LuaOJHASKjJy<*fl% z-kNabtp!)!+HmEq16SU-`u-xZaOZf;VhCWw_ptQGx6I7*)95k5Pl`{TOw)-jC6M>-`vQxboS7E1zAs^4Wtc zpMALUIe;slL%8xef-9e6xbiuHE1$tJ!SrLV@NahtS3YBK`A@=? z{}f#LPs5e}3|#ro!j=CVT=~z#mHz@<`7gqi{}NpJFT<7p3S9ZG!j=CT{L#bw^;Cx| z{|&hE--IjwEx7XEg)478xboJAD{lk1@-~DkZzH(!Hij#26S(pgJasnD%3BPsyv5ZyT=t?7-C*{fN6$VAjVY7{K?j`=vv;elE-izQOJv22b0ax9Ij`aBV*h z*Y*=|Z9fg)Z2O;qKWv_bAGMeNMh-WXi#jl;Fx1YGM)!nNKMe8HaoPs6p|3|v27EDzUu3vjKs2-kW`aILot*Lo{( zt+xu-dTVg4w+`2O8*r_+4cB%$aOI~9*LHevQL3pS!ou%^3coeZ5cM`gzvV zUy>aTQQkgj<6|5A<>aUD=f94_^>bzu@Xze;$0y+j>E{{3|J*zc*Xx@ZxXzz>xQ-d!5IzDB%j!y-y<5Pv}_|)J!K6SW`PXn&w(}e5zwBR~EUAT@<4}PD!qQj3q zd}uy^KV&|HA8$Dv!FBwDr~7%7D;@tBT*p5S*YQulb^McX9sd+u$3G3%@z20-w0vga zI{rDhj(-uZ^_JjTZyB!jR^VE16|VKx;974TuJtzHT5l7s^|s(zZx^oXy$AnG%Sj*p zBl7|Ljr;iA4B^-8?|lS+zxfz`=>dNH1Rk^NS3e+E`PBWlSZX%6uRPd)orG(>DY({~ zhHJeUxYnD6YrQ$R)|-cGy#=_|TZC)9CAijGh3oge)Zkig9j^5@;974JuJyLyT5lV! z^>*O@ZP$AjuJ!idTJI39^^V|L?-;K2PT*Q^@Qm49X}vMH)*FXwy$QJ1n}ln+UmFTpRi+iw~EIr9qq>*iJX%`ty`Yw#-$^j?SO z?RMRO>;3R;xQ-hBGIzD~4j?VzD<1>Wo_>AB>K4Z9!&jhaH6FhS^pE^D< zxQny^x-V$8vt-`h58eHqG!?oT9 zTutle-VR*r?ZUO*9$f1k!VfvfAGZDduxO+3c`34W;Ee=ftHVP1j%+U^%s z;ZL*sMK$Jblal3QquHT!?V{kps9Eaa#;}h`Tm?z=CH&4O$ zvG*&c;g2`Zz~64KM`z(5*6Y{syY%`s{AcC`xc(nj5q^yQ|CbW{bn`NNlX(TMpHEkX z>*vtb;CI`0>hSNHH{d@uZ^D0R-hy9h@AGWKck2D0aJ|o@3;&Ld@4@x+y!vqc+^zxq zrS|&K5PqKd2(H%)#_*<%pTIw39z1(C|96_l;7_oh=MaY#rXCdh=IDR(I z>bn?ReHVwT?-FqJT@tRoOTpE5X}J0>16SW=;p)2_Tz!{^tM3YM^<5FJzAM4icV)Qx zt^!xzRpIKp8eDx>hpX=zaP?giuD)x*)pu>U`mO_4-*w^YyB=J9*N3a`25|M=5U#!( z!PR$TxcY7aSKkGHGMj((T@0?ii^J7-3Ap+$30L2x;Oe_HTz!{;tM9UK^<56GzRSba zcLlimt_WA(mEh{TGF*LEfvfMTaP?gcuD+|o)prfJ`mPCA-?iZCyEa^X*MY0=x^VSf z53auJ!_{{KxcY7gSKp1`ms{VB;p)2yTzwZ$&*oo!mw>D9l5q7`3jWX5Yian7gZ+FN z_+Oak;XktN6yVx^5w7i*;M#r_uD-6p)z@{nem{BxuD))<)z>Y!`nnBQUw7c@>n>b< z-Gi&I`*8L30IuUUgn!Piml0h3K8CB`Cvf$9aKdcf)bBC4`aKR;zbD}8_at2Xo`S32 z({S~B2Cjb3!qx9NxcWU0SHBnF>h~gC{a%8r-^+0Idj+n3ufo;uHMsh{4nO8lfBiM! z>h~sG{oaDB-`jBYdk3z5@50sZJ@}7pKl|`snh)UW_aR*UK7y;?$8h!g1g?G$o-><& z^?MAieviY?JIr4`0aw2#;p+DkT>YMgtKTzl^?Mese$T^Hzc=CP_ZD3J-iE8+J8<=T7p{Kq!PW0W_%V8a0$lwy zhO56OaP?Pk;%uJPUop7)D-KtGCE)6>BwYQKf~&vMaP?OPuKvox)n7Td`YR7te-+^B zuOeLiRf4O(%5e2p1+M<8!qs0jxcaLOSAR9&>aQkT{ndi2zuIv1R|l^C>cZ7uJ-GU- z4_AK;;Oeg-T>UkItG~u@_16Th{tBKun}79J46go)!_{92xcVyzSAV78>aR3h{gr{M zzp`-kR}QZJ%EQ%P1-SaF2v>iV;Oeh3T>VvntG}vn^;Zq9{;I>(Uk$kWs|iZ2lDeN=+0kIHcMQ3b9(s>0PrHMshy z4p$#F;Oe6$Tz%AntB=}n^-%||KI+2NM?JXus1H{k4dCjdAzXblf~$|laP`pyu09G* zn$5HNCZ1l+ebj`jk6Li`Q5&v4>cG`UUAX$F2Uj2U;p(FSTzxcz ztB*!-_0brvKAOPQN5S)F^RGUN!PQ4`xcVpoS05$e>Z24~eUyf)k1}xeQ5LQ~%E8q~ zMR?X8AC=%YnwR0{+51T4e`N1Jslz{L@5^eye`DT+t6y4h^-CMBe(Au~ zFI~9$r3X(w#_pfMUww%80sQ0UL%7bjBe>4DW4O+56S&TAL1s43I={u>I={u?I=?00 zI=?01I=`jh?~eQZNW+!S3|#rl!YW@ zZ*{ox)_^N-O}O&bf-7%rxboJ4D{o!6^45bZZ+*D(Hh?Q{L%8xbf}dgMw=rCKo4}Q~ z;Dxh!R^DQ8H9aOEuzSKbP6<*f);-b!%gtqfP*Dsbhk z3Rm80aOJHISKbHHaOJHJSKbD2F`T>-?OCtH(2NJs*;V>-mrz{6zi#6!?GHd9nbXxA%J&;eTxR>q>Av zpHPPD`Gg8w&nHyjdOo2Bzt-lh!#`*D8yoP6c@wV3<1M%zkGJ6;wDVX8uE(ccxE`PO z;Cg)8hwJg_0ItWUL%1HFj^JDEb-*!PkB=sBJwA$`Jez0bEdf{Fl5piM1y|nEaOEun zSKhL4vHQ>ry z6Ry0q;L2MYuDo^N%3B| zgez|;xbl{UD{mRN@|J}wZ#lT~mWL~E1-SB7gez|)xbjwpD{mFJ@>Yc_Z#B5`R);HZ z4Y=~whASr>_!o5WdOIdn5P(_P)L`{Cd0JHG%8( zo!}+2dA`ZU$KZN>Cl0^O#wXyvG*80!daR!>1wYw54cF@_8Tje;zOO9&GP@s@gX{VK zJY3KJ7vOsSzX;d!|0TGd|1ZP!{C@?0ioIT3h3onA8eGqxH{r@>3$A>&;mT(Ru6%ak z%4ZL*eD>kW=K!vJ4&ln@2(EmN;mYR(u6zdB**q(sF}U&>hbx~6xbm5VE1xO2@|lJ! zpBcFFnT0E#Ik@tfhbx~2xbj(qE1xB}@>zx}pB1?BS%)ic4Y=~wgez|?xboJ9D{mdR zem_DNuDtc&%3B|TzM%o<`K3sVlz?HWlTzMP8mA5fmd7HqMx8S9-c~;(HaOEuy zSKbnE&gX9g*ZVQXaJ?U60@wR7g41U6toLKY;Ceqs9Ip3cB;a~KMiQ>~W2E4EKSma= zeCFWFXCAJ67U0Tf5w3ie;L2wiu6$PD%4Zd>eAeK~XC1D5HsH!<6Rv!=;L2wku6%aj z%4Zj@eD>hVXCJP74&ch?5UzZV;L7J1u6$15%4hJh**q(sF}U&>hbx~6xbm5X5BBx* zW#IZf3t9Ns#^>PwVV;MdV(;fEz+YxwhAaOSxbk0xEB`gP@?VE5{|)#?J3lw!%6|*4 z{I}uCe+RDocj3x^53c<8;mZF2uKW+-%Kr$i{Ey+v{{*i52dB^GQ~8gCQ-g<>f2(-|{;B=__$It>-hw}9KR2umKSDnr4E{1ZpLgMBoA==QIdy$_(Z&zpx0(;( zpE4i8Z!;gmzh*vx|K2<}(;uh3!cQB*KL_afVfex3arlwu3HWQxlkiREDfp6k8vdu| z8Ti-i@kJK?ee)cAY@UZ7YL7<>@U(dmey({5UN$eoZ!oXG+vZice(y#N{wo__hd*N8 zfd7wq6MnEguik=RW8Q|p)4T(}-@FTdz`O^4*t`#)m=EA*+xt3(@Yk4+;5Y02Z17K* zPvEzk2f5k&cgo`FAPo`wIrc@Dn6-T%qM zk2Ej9pJ85vKgYZTSI?H=IU8SrUu0f|zuvqCzs$T2zs|e?zuUYGSATWjH~JU^UHGHs zJ$S~QFvE{N{Cx8PTzxl$tM5i|_1ze*zMH_+cfrg3e(8L!zKg-tcX7D-E&*5HCE@D3 z6kL6mhO6%~aP?gluD;8`)pvQg`mO+1-xcBNyAoV|SB9(aDsc5(6|TOk!PR$lxcaUE zSKl?^>bn+PebcbxT^Fvt>%rA`eYpB=09W4);p)2)Tzxl&tM4Xo^bneFeV2u+?{aYUT^_E!E5OxvMY#H|1Xtgc;p)2z zTzyxCtM6)X^<5pVzH7kMcTKqZt_4@$wc+Z!4qScLg{$v+aP?guuD%<<)ptX<`fdbQ z-;Lqwy9r!<7e8w@|LVI0Tz!{>tG`n4o2=K;@c%l<&zFHe^+Z0$kfK!nOSp zT-&e0)z>w+`nnF+&qHg#)z?k9`nm;IU$^1v>keFf-G!^KdvNu2AFjS0z;)b)@XW#f zdKtmh?_;?7eF9g%2WQXbP5mB&-)i&5;h!>3z}4?bxcWT>SHGv>>h}y>{ho!Z-*a&F zdmgTSFTmCBMY#IC1XsV8;p+DaT>V~!tKVyI^?Mzzes93l?@hS+y#-glx8dsd4qW}- zg{$9taP@m1u6`fD)$c>N`h5gfzmMVS_X%A69-K3qfAxC|u6~ch)$a+o`aKC(zo+2p z_cUDno`I|1vvBo$4z7OB!`1Hvxca>aSHG9w>i05S{a%5q->Y!-dkwCBufx^v4Y>Nf z30J?j;Oh4_T>ajGtKYkD^?MJlejmbrWqmq=tG~u@_16Th{t8|>n`iY`46go)!_{92 zxcVyzSAV78>aR3h{gr{Mzp`-kR}QZJ%EQ%P1-SaF2v>iV;Oeh3T>VvntG}vn^;Zq9 z{;I>(Uk$kWs|iaP}D{ndu6zdCUBR~N4S>cQ1teYpB- z09Stv;p(puT>UkMtG_02^;eLe&A<9923LP2;p(FlTz!;=tB*2p^-&hCKFYz>M|rsV zr~p?V72)cm5?p;$hO3V%aP?6Yu0E>4)kk%>`lta{A2s3XqZV9!)P}2%I&k$-7p^|) z!PQ57xcX=SS04@G>Z1`{eKdxvk0x;SQE=XDp4CS&xcVp#S05$d>Z2rFeUyT$kJ51U zQ3kF)%EHx0Ik@^L4_6-*;Oe6yTzyo6tB=ZX^-%?`KB~giM>V+ms18>jHQ?%_CR}~g zf~$|(aP?6Ku0HC*)ki(J`lt_A9}VE@qaj>Odz|}`txcVpuS05GO2if~cO7Nn28U8eTKS>3yKB~giM>V*9 zpL-pC%z^&;Xux-xH{t4+7F_+(hO1vXaP> z0$lkl!j;bwT=^`+mCp)X`K-c~&l+6$tizSh23+}U!j;b!T={InmCp`b`Ru}#&mLU) z?8BAM0bKbU!j;bvT=^WsmCp%W`3x?c&9m|ugDanLxbm5RE1yZY@|l7wpINx_mV+yA zdARacfGclBxbjwlm+gF5hAVFsxbjwoD{nQp@>Yi{ZwEx7X5hAVF!xboJ8 zD{nox^45ndZv(jUHiRp0BlsnDejCG;w+UQ%3oe??v+@>$D{o1-@|J=tZ)v#lmVqm8 zS-A3+gDY=&xbjwjD{n=(@>YT?Z)LdhR)H&TRk-q2gDY=!xboJ3D{oD>^45YYZ*92p z)`2T;UAXergDY=+xbilDD{n)%@-~7iZ^5f(^Qr4S23Oz3;o8pxT<7OBTs@wF>-mr@ zT+fH(;QzLd-|sxUV&};M{2$DV@DJGix)NN^CzRoOKA{5F^9fbBo=>R3AF+As@WTh^Cn!6$6Ihc9&f`xYv-{JT#rw?a6LZl!5_Bm^x=AZI)Ll(=@72Rrz7}E++V+A zxE>!(;Cg%%fAwshmA3?3c}v2Tw-j7?OT(473|x83!j-oiTzSjGmA3+1c`L$|w-Q`= zE5nty3S4=s!j-ogTzRX*mA3|5d27Ozw-#J^Yr~bd4qSQb!j-okTzTummA3(0c^kt& zXpf^OaOEv1%;r;hi@}w*I9z#4!0)y5TN19krQph28m_!$;L2MTuDs>o%3B_;ycOWe zTM@3jmEg)-8Lqrl;L2MSuDsRY%3B?-yfxs;TNAFlwcyHI8?L-{;L2McuDlK4%G(gG zyp7<>+Ze9AP2kE~aPe%OmA4pNd5go9w**{yOTv}66kK^r!A`&|>bUf&5Wna#6a--*HX`c53K*LM=|bM1M; zB;D@UrQlbYr{U+?>**PI**pu^&lAqU_56PxuIK*?@Z0VFSP`!0|4VQ^|6hjd`Tq+1 zMThz0UWGsBao%fiJ%8SWE1xa6^4W$fpB=dJ*@Y{gJ-G7Ohbx~0xbiuKE1x5{@;Qbp zpA)$98N6mT&&p>Eu6)Mnmcs;G`Aou<&lFtwOv9DW3|#rl!j;b)T=~qymCpiP`7FYf z&k|huEW?%03S9ZD!h z5nOp2(=Bfkxbhafb~ew-TMVwe#o@|Z0AU( z0j|82;mTVDuDn&@%3BStyw%~#TLZ4VHQ~xz3$DDi;mTVFuDo^O%3BYvy!Gjpw*g#v z8^V>h5nOp2!-|U-_|bMhunPaMo%d>Ry??0=KhN%`HQ;)GP7|*8=d|EUww*Ry z@6YML@38S*_;r@g9$fF|>BDcZ`+);^+k6N=#qM{F;CesC7_RqYOyF;_?F6r%&9mN* z5rgaf7;(7XkCA}u{TNBO-j9)j>-`v6xbm5UE1!9|@>zf@pGCOxS%NE{Ww`QLfh(U? zxbj(pE1z|^^4WkZpG~;(*@7#dZMgE;fh(U~xboS9E1!M1@;QJjpF_CvIf5&nW4Q7; zfh(W-0WbRh5iF547`e0e+}? z8Ls?S;L3j$uKd^F%6}cM{5RkuJ8w7P%6|*4{I}uCe+RDocj3x^53c<8;mZF2uKW+- z%Kr$i{Ey+v{{*i52gTX*t@0m(EB|r0@}Gb!|4F#=pMop@X}I#Afh+%cxbjwjD{n=( z@>YT?Z)LdhR)H&TRk-q2gDY=!xboJ3D{oD>^45YYZ*92p)`2T;UAXergDY=+xbilD zD{n)%@-~7iZ)3RfHi0W|!F(|N(0NsPi@}w*I9z#4z?HXj#8cr+X+K?%f$zPS|3(&m zj(HCL5%WC!5PLnS0NA>ynh(Q;w z_4eS8v-J+)n{7Wwa2@|KT*rR`*YOWF`VHU_pE6wgQ-N!Ls&MU34X*uZ!nHpw_|P0oVSw*YOTq>*~U_pFQ~M-hSdCe1p59!;cYM+aJTV z{Rv##k8kqZQ+}Rl+fTq>Y@UQ``ziQV+y5;54%Y*R zUvK;0jrfxy<9l%ZKDd6wkBp2T!2iUyKaBWMk?|w=ZT7u!#Gf1)KY{<9Z9lL(c<#%i zBjaQ6&)StAkN7c>@d@|_%TF@mI>)$+rQkUWOFH7mMz)`Uf5@({Y{WN2#^>Prc@+7G zyZfK|D8SV(NgLp@5IuipBW}Agm14yAvwyo!orv!r@j=9+=eLAiKW^UWd8`oe==rJ^ z@#uMJ67lHyCvS^!+mD`SS`m+)PlgeXo;MPwxlhg69i+D7j?}&IbpU*#dda=N5Cz{Xm?R6FB(R?0cUpSBE^U{b%^Z7A* zUyK_c&F9G$GUw5J-XHO3K2Njox$)6_p5(5m@WXjDpWlAsl&5Y(rm)>Y>BdL%`C|*E z^JqRVvrsyZ=JQ(-kLGjPzHsBC`8?w3A%q{!kD30<|MkM-{AcIUe1772yFHrE*JXBl zG@lYQ+}Pss^2`=F zWY>3>mp09>&L6+-_ow@_WpT&i^8D)J+~PucdF$NfZA(`K$8TEPxO2RMP+t||b+>UUq!OH5UrJbw6 zbje$HY+aozFDNj55YX6AN z;x;<{c6rmz?d9-#urF7)ZeLuUTiLmB<;s=S#qGPlu{ggi@9;2KZogCTJ~3|Pt4Me#kniO#rP#{Uz}grxxDDE z-?`OrBP-jtu7-zhk0mZIZrK`MHOnqFvrE}ys9&NV7|hMBZd;jNVeWYDF?MG;JV-u@ zYkuF|S=3^D$g&kEV}r)t7oA!zvnzY7TY)O-0Y*eP!7uBVzwY(~ zZr}5Jwy5p6J-Sm?d1+}|u(IUR9o{@PZCzema5vTvci(oWi=EnZA9jCvygPky`r|im zT@Fu&E_S=3IXxRL?F^GKfBF2@ZNWKbFKsEDf9fkQoL{+YkKOf0c-L)U_u#Dy;ou!h ztBc2<`O1r)y|NmHI@r8<+s>6zbQ|s}2+tkUz1*}I4x0JybZ^63#pdOu?Q_dpcWkkX z+O@Igx3^qy<;rQBw^;6XykY0!&c!*m@nB^~c-q{t8vf(Tm4&4po1-_=t>Gzh=kl_< zErk2Ix;Q-&?hHHUPZ`s%-Sp9~r{BMPe%n@;>^IbkIHPRxbpqLLf2ur0j8-A&1zEo}pfrSO={hhMtmXTfmileyLTjoUP6_eQk~ z3!ArxqgPhuxA;r?^Y8Zg9S$O=)abRcd3n(fcCiRIv~gzS^eVuu%pZL>+#QjyDBW#% z>!#=g+9B2D^p?JB$l5oyX)C$yxV`hY;MJu$-5NGUZ`l63;ZVPO)5e@mVdtIY#W(B> zZ#*-*#Fb2MUvuH@Vre0|=g~v6$2Yl+=m5LU!>#!fPkDaF)&<)^cQ@nsaGLPE9bSRq z=PS3n&vR#Nzt!Pe9o?~!VR5p z{0Y%JKmY&#zBRm49lhVKEe)>o_rm{o^iFs9O?Uq-`td*E7tW&h<=ywQ?yogI?BUd| z@3{ML|F6qO?<=|s+1>12mv`TH+sy6~|Bp)B&!pG&3L(37YB{>E{JIdAklyUzS0 zo4;ZgbnADIV>$mt>&)M@`Stv=ZDx=8-SaPNt-pA?-$2nW=;n8C4dndCu6O<02}RFW z+h+EdKe^8J-?jOp`FD@YIsbj(mA}^YpR^|x^!)dF^M5zI@LKC{f6=c$di>qve9qqq zZLRt1_T+`0PhW5T+rw|HHGk?$e*Ugq&>esGyaDI``w-mx(dRPUMUwU;$Q$T94Q?CmL;LN&3WAr0mtSlC&R6~MPg{=M{O&0e&VS8%x4)F1L9btE zKF&^dx@bYUN|E|p+a~lso-26`s|8V~Q6MlcK`LoYF2N51>O8l z5C3p}_j>hO^9RrI7u4%XwwXQh|AKYaU$yz;k@Y`gjrl*a&iVs;UQn-3tvCM%*I9r4 z+kX86yP#YDv(}jZ-gWYyKFMG3HoLq&G5>$NPX0^Z+4K0jNb&fO*UA6T=HK=Dne71Q ze|Vkz4{iQb+b~TN zl+X76eFZEyTdH%a*z58D_ zfAswKf^Z{T|0ivJu0OWj&-jPd|Iu~k5ANS{{V!T${#S>#*7}n+zh3|Kd$Z^I&kw)h zX3A=SeJK&QroaT>l$GTWkJq*hQP60Atag7D1f}r6yW`KxCvASN zmtQ{=?vT5@)%C7Tr?vm~x~IP3#<~xEc27#UHF5s*d#1y7kMm#d@%7aLb(=XXPAJ~H!u{i)Mtc#o`IyUzTXx9&OrtHMoj a{!fL#wYwRMANBJm>~Xw1Ztgnb<^L}$n~%}} literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o new file mode 100644 index 0000000000000000000000000000000000000000..c35d2379310620ed92bac9f1a584521f64da139e GIT binary patch literal 150336 zcmeEv34B!5z5ls$=MDqehJYk&GQgmykOcw5Y61yPFhEEG#C4n`Gs#FcXC@(96*Qnt zBdx8rwXcg^-|PPDYwKPGH>|C#wrcHbUqx$Mt=8JjYB&Dh-&yXxvxMXh_Wj@g|GXc# z^EuhK?ddcC&jYxfXE(aneU zA4)zs+FUWZaryk04hFSVPZnK2-C%6wP{YVK9^40(mq$<>ZLSKA4&MltD6X=idHVs9 z8Ha<1U-plF{RR|9zJJC&gkJUM!9_*$_5oslxKVN`LQXL9_-TJ%^`|{AjDDTl_spvA z744q~O$RU24i0I-!@u+gC;vG(@;!n^4h1K_{(2DhlJbG~!qkQ5EYfmuf?JOT=RX#l{0xcvIuRD_zYh}Z?MdfM zr5||i<%3{=GhR8TXkM-9;U`u-nhYO|3DXa*EgN}M87;Kjjov2@P?KKsulil`h|NEv zL}OMBy!y%)sRMaK^iguqs>4MG{tXf;4{bT{M$vvBnH)U04qPxj_!4~vM;;8`NdR39 z+MB_V+JMi78M!jx-7>m%(km;d`>g&u_h9~#;K3zN28SQ6=J4=g?}#Q`TF1D$Q=qwF zRzo``+co}NmsGE05a%*tpx5runJ{0`Pn&4<%Rq)`u5BYs8c<{zU zAQ~R3Wx=A_$KI%MYsvYhMgHJOT`8y=i|z>eqQh@NWD8n)V{rJYYL@f{kJMFznMH@M znyw{1(Ia)!HT3FLRl$)Zf#JQi=r|Y1NA=-1_ZD6MXHYhbc3!gOz>7uue@%thOVxhH zHjXwdaUb}0(f((E+c?^?#Cvdqw(8NM>pX~r(QU24;kSH6!&gGkxd)dlAr}M>KR+or z@>L16BMPEO*rMT$8YXEthx7gcUJx-hb$7}O7P;tB_qv6GA4L>jm z#z)ooGh1;xN#fT3@@_JmH{sf=qybrYe3Ti*IvRqL6alIMi_1d$+Zz;07U*MzT*z_|_d#vcXF93}JcyR55!E282 ztZ?`RJvj19vm@Y~>62c5;;+Y!5&3&2Mm`;mIPHPKzH#KTS1vy7fuif)1)<|mPI~#z z@VId0Fwe8=VUfN3DbzQNe4XlE@uJI-Z~k!O=rH+v)k_0^tR3OWl*egs_@UAZYA&p~ zsOI9D&_xeQu9rUu37{VPvgV)0kw4Xs{7p_j!Fv=-P`0Pu1Id zs$t}fkq0Ud9h;tK`TW>)z25Aw1Ba5WDS|Az;OG+l*wdEI&7=8if=EeLlxWW#dm7j? zGO;f|53_4V_XqOfGGsva*3l(vYK}d9&ENkEQ`lV>dQf{OI|Z{~(T2k*60Im}7+sq; znhdz_W{^?&?V6FpHOGErRR>4&^Psq9^veMZB}CHGDRM?$lYDiRhmONa_JP%MNOmDL zcT(RAIhIE_?Za>GA<3q=qacDEiyKDn4crE}X7qYFFj{M_`3DV&JNb~fUk-^k zEos4n-v~4!_AIGE469aPf_Fm_zZ$d`5Mg|MWe&~;?N^pRM=lJ^8TlCo!m;W3Z|o0z z8r)j)RLl89Y`TUlx0;Mu%B%?-V&%Py1gN=s@LN*J?E3acD6oRT;VT0bSOd|5J~&EFt`?m$KTlfRL4`Jg)-#KO-qI;cH?C3WCY^m7LCP&Onrx32P7 zaO4|-XQ_VVhQJf}Y#2ow?CZ@f2aY9Y2S+`dM{3`C6VX$2fI{cxE0CG_{C1z8xG`>y z(&y;S!i3Qq0*6rMzNs5|y{_`xm4{M26CAxaKsLa0!Gkw*ZlZ3j9r;}bso6C=991p!koo%$VH9m1alchRe8g3M?D3)lvnV@3M8(MA;phJm zTy;1x6Un$}|MPBQ_5?@V-{XwegV8pY$Wb()YDUADGejXRQoepWFLNLNW;iq zKw?UQ`S~<@DFxJy-bT|_YTHP(*?dfpAjoXLDXxArAL3dNbR+I3c~fqtrkGx>A9cGa zN*jard4YWR@ZWrhDM$x!L*OL=+#Gn515;}Qmmv4u5ZDJZ0o)w85rByF(S|^6(SAyo zJdE8%*S-#(u_Hf!O2ff`R*y9i?}_1~eneX^nHe0NPx{RwSghDghc^#(X{jg#^j$yuM8|fvlcfTq;|i#=hzRqz~p+NQ4|Jkg`xxfFydue z+}ieUAmCa58DY)?r1JF)Q>J4>m1;%J!8)zzj@MJHkR}YghlIR2F(IxogcKck087tp zqxr8+Opcx@XXLQu@dNMWOJy2W4-WtQZ^2a$77afPPc)zb!TQ6$DzG{)2(S7Z^tGCW zY8XW@*jB3FvsW$AURhx6hq2h;{(PEudGOeS!BrOqDv}op_dZX(9X#-pti8QuH2=AD zH>0zQ?)XEBm$~?-kY1$hfzKj4y!%Tu;Zx$lplLwj@>?cyhUp$YcuGOW2TuhDuw+@SI`D>h6vPFnAnVc4Mk(%Q{#(T>)e2^P6^&dA})LmMe?o4s=X6vR7a z(J@5akN#(1twrBr%>!ol@!G{DnQcn9%*ta8+Vhr~yiFw8<_+>sx=Sn$Y|~R4R(S|< z2e;%|A{w+mTWxx!X^e^n?G3wCzq53Zzj%W^W3yV+TeR0xEt0M-g!`Da-lqdutoDar zt*#$=qbB>tST3}2{Ah-KQ2S5IN;Ln`B0Fy>=)#I*U^2mXY7#*c*G9D}4ArWAnk~Yl6d%*mBp%Jz&}1fTgdwKjd4L zQf|1s+0I9T)^5){$EepH#=&FN8|TdP7ajNkc!Hyt$%9rb##r(^x-FHr;{rzNi_#nvOaj0{JN8N1YTP^`pI)1P}bCX#bZ{ zXo$U8?PqMmXu~>w)OibV8%A5!dF4?j1xn56R(aNW4$P=OxV#)57H6GShm6)5IOhE` zqWxHlR~~+jfVm!12c75E9~6u58f+x^k?!F)s@*uYeHJvq(T%o)+$Ex|KEkh|s^Dn9 z_n7aMZI&IBc=%~$s(u{O!34g&A|qazTYoUWyy4*TC+lG^!L&;e$J6yA9%Y%ZNZE(O z=ELwk7A7n@f}S{tRCCP(`$*yN%lm>O(}McBI37RO8y(rWavkCCqFd31M?vn39@)4U zlt(s}0tb$iGZCBv2aAjLuf|&Bm22&h_FH?Ty=D)tm+gt?CF@W_o>=0Pb}1vVzM}o# zhuD`FV~t0e)wL+G+Mnoa-yKQ%7j;ZwL-BBLDApTGhI-ltqM`o2zHZhN>9K#Jx+4~k zv?opnHRU}x)Ku^!*X=MFjt{nVn z#Ei^{g}Y-{#CkhX7bgq-(Z0C9rFDtFBR;qeVp$`{5BRs#Y=oYQWkX}$?2RL7rX78~ z(OBm|JR)@r_!lqgI87KVTNLiNbRd!R_YU;5MdJRxsJ|nUXphJGlYMcxFA|ThThy_H zvjZ?~TJ7&`3&n>z$ZSAK4ozW;5~2RkqK?pIxUrsoP=we8i#jfXmq>%ZtsC8u;JpD- zq7nWNC3?c$-6ri6Wk0#e-_*)IBfONQ1)Qj5EF$5=j@AB6;aGR1!=LQ)cf=Cmw(f|( zF?o4EJQI#5&rkduK(59xkI)>98evg@1yrL1H{x(ZqIOBJ-9m{v>z;1W zX|hVGcdFNlVex>VMBnei@PduYmVBGY;#R^oGxY-}H9k;5I<(G>U zsQe=cRY^5KV;3t>wL=i9QqXkR#R^o76NIW{dG_Lowp4X+_P$nrS8XG8Em>OHoUNrT zw`R7qIa^CxZq00IbGDYY+?v_a=J8spV(9oSRV`Ev`R|NsjqOtEm3x3vKCwp7uFTf& znrQ1)Pr6u@*?&qI;nKAcE?phrCaUipZBi9>8r@1 zuOf@SiY)pn#?_~yhz|bf!l?YJoLHW+=9>93KUyPY+@z2xcvq(2U73Q%9dGG^DFV_Z z6E0o!M8;O8?8+>%E3?QRzh^ULS7ec0kwx}9y@=;oG6MfM^`eXY^CIM*Asde$_~l~b zkA_xBd%gVBm>M4vk-2zIXPJna;WRbHte^RgX|sxblNMF@Pxg5O^T$n*%EXDK$kWZG zpfY1d0_nSsOu_#& zPrrTMpf|_pvf^&Ln&)mar{?W~#=56BT}^|F%>+9Bbn-qaPHA?t#6CS^vJzM&U-gE- zTJ{Ji-Ku}d&`_~ZGd27`Hjk2&l5e+P!Aj>uGQnrlG-@oQ)L09hkdmyX8&Hkclyt%5 z0PWUv*#fJ?E5ilWsfK@=>E!Qp!wIL%R$d{TQ=_SmGG$k0kv)E%P;q%Xj)Lhz22i`J zz2?Yh)?~y_op?sh6l`u1Ey24o1&^DN(*;weO*ffv>7pl+kuzmm+Yx0oc|TLOb5B#x zXWCtnMfUg+l5Y1qy-2aFVw!p^)6@U+d-3gz5PAYd*D`aQk2~ER5ghDQ`RT=i@79~# zO*gp}=5<+Ph#FN4NF5e~!YJ(q<8mas`H?=gDGL8u2)sas&vCvSnZhOB_n2d>gU59aB@z*V49I)%kGAMq8n9Pkgxp6wdB`ajYtVC{Cl?q8;ilR$rs8qK6i^*XV zr;wj9D{bNw@?Y)Zgk$cW=)^`)EPvnf-=cNNaX49Qpk6uY^7r&ljHZ( zcyzXNd_~GI^=uNOG|T%3=4qOh;L{&-gK@k@W$N0MscToJu3Vnrr|Y7;ovw`I)UwE2 z_vH2jKT}_27Ja~F=*#Vya;CnDEc$@U(3jgY<#c`T#K}8xLgPJsPD_syN?e)a?*Gei z@S4o(Ib=e+mz0=^qM(OZE5* z-g2o@y;6vG0TuXe)0&;1klghLE z=z>K`mnAskg+)*aa_gQxo|Ir)yOiL6S|e<_mPqf|bS;u$-fo8bi8xGk61``-Ty=%~ zB;3+8ZG=<(qfQzo@{X$Vqtb_01=H05m97n_bY(zUy(OTr`b_DfQJJocaOv6zm#%Ii zBRWglwxqc-N2}At{J&?-4RS!LzQFK)UxshS9o}llso`MD8)sR=K#d4%#E&cZx6-^K zX%hr1Df=zK;{}{1xh*M;nNk|ZlTsn2tT%1hF&>MG>VGavwKQm_Y1p`JQKWInGKF1< zO`Pvg^~npyJ-+$B#hXK1epEK^lN0yM&n2mDg_nvn2XXtS3@MG7QpW8iHFi|6P9RIA zvrHr-U7R+DXlz`|lq4#1eSjj8F|1&%1?Q`JgWmKz<$I~(8z-!E9^0>!s%1cU$c;cl5 zsV52oo8B1{dpf2x+-;7+CIu>`_NQY?^%u-GG$~M7V?T|YW1bR?zdyP?&12%}Sh~Wo zq$^G8k;+8!+#|%dHU`1 z#?g$p+pfIvj5)5x%?&?KlOo2u5~Q9_3v7A}Pb@bm4eF=?>i`A5E|ufe8uQ7yQvIgc zhQ_}s(3S_3Ef?Ex%iTrdk-@b-%xdM`Unf%08NEJBMJW{z(f$AJde2-I=)Fw@17fLDSNBRyu zQ(cQv_aW1QoeKP+M2YWls#3Ll+yYN3P+1@dP3;m$H{v9TFO#2WvjR6slxUzTsZ}co z71)_VC=2GtSQ;xO1zt&0pwb~sSEWlVLIv72wv5}as*TG{LE9CmbdbjFx2lp-gY|_1 z?HadFSmQ;e#wG>Y1vO1rkTOGKtqQaYYRy5=dD#S=H?E*`E}c!ibX+Fo?m8we1djr1 z%m{8)V6#NwNNtXSe`t{@@FzAh`mtxaJ}p0qRl&99zVu=R1||z~A}g2hEBJX#x(FvA z>z*FNsy!-wA%+#G-nhiO^a?y84b|D6+cagVGJzx0ZQw{ty@19tqD2xSS{3+L(_0rS zP&H3P`gpRdB!S|Zf>{6$lJ}j9yHnmg;`RFW?Q`K{Jmzmmf`{cNrbh)TH==_Ur+blb z=}sivcD&iM*0~mT;GzP6ZrmylC6A5GpP__-P8N@DOvTb{6zB= zsG5)1c$TU5KW+#@j#LgPk&(=imM#IMYoy<=r>ou!nQ<3MC(A*$!JHHuw@R?dLMiZk ziGno`F;#e%MW?{OT1|O~<#~ivv*ah9>kLV7ul(eR=YTAH(2o3qEZk;CUNuQbyg`1# zvkJV!L^b_Gf?gS@(0jfFJ4{sL3ljXJg<>*`6w6PDFO{I`7N8WUqKW%N6|OWxt5Jdb zOjMHs-(#X06=>^kcvyD+7v(3kepQ0MvQP?Cu{nX~W*?LNqc($Xw&y6jb)EFF@}03M?&$%Vu9t>&x>mxa>m*#d#)+ha4YEbM<)_BZ`=$h6vrvDL z;F)IZoVP)O@3K(kvc;`tpqytlR6yy?T`CD8@)J{~0@W7{u(nj-?v2ZRb#g2e(&vX~#~O_?og)bb8ZQDC>J?qUV@OO$AeDqUd`?ognb zA_SqVH$TQQVudNFMS*oDs!4%;CTgbwl_jFhs&u_c*rGtYUE?oGm2>J%LE9CmbdbjF zx2n?37NG*|8pmIhULXa8OhG#psB|D%$V&4g-Jc6&O@%3ChXQposW&UIK%zunsZ!D+ zH1$XzUEL`XZW=a`1%9Vxm$2aK0QOOnwe#}BC!5yZqao;A}Amp*D^y{`wle;|vmJP}l->-W(pxcs2T-aJmV+v9 zO_xlEwdtZKa)3K3J@_g4If0y@NY(F4PGN%+e$e@Ui}x1UyyM4#`i_S!p2rI?C0O+h zx>HF}u{(htPM1PGmo8=^y{Y8&Mc?M7OUidiBIKW2b1vWQp$SyiIk8jWn5d76!qOPKJBQ25>4|{ zy6g$fPghCX)F7Ea+EQO3`IgnJ@wz~f{zI}9QJ$kIrf3#E^jYI>@Y4lMz)bZT{u8E| zYBD#iO`qh_S$r%`X6nMog%dbISISgF5jdtc38X7cXQ8u{%%gg3sRA!1pT?Mbnx+@#Kq!LX~GUnAZ;+{Mo)n|cjN&sx@^YQ@Z5tx^^9$-EMvVs|)(F;ikV}+-1twokr z{NkobU@$h7*BGWf#g;v=k4&1zb%J#IG}D}uPSQ@D$=D2oOD|cD50XIbEL8=@W|qM> z#h&WY4{w+$3_5k@*Zy%$mNQqWRh)~Wt@dQ%B~BupH&?5iwxgsq z?>u7{EcKJ1O5o>@T&rm}Z78L0elK{>wHgGze*#DZbWk3CYVV$jj%ka;Bx5vE^lG>k3V~e#1=i%*rx^8M*1ynJeKcKg6G9*gRKd zbvyosnF=~-@@f@#yh&^9wXkiiX$wVg6)@{o@Gw|kVum(jXG;SN%YbTWfI$Ys?A_AIiB%HYgH3d|& zV=lT~GV_|9G#aR87u8s?-a3U7GIri_0F0e)W8{P30-NDPaG{L-4{n%A!{Q>#ZPXm{ z%Ee~?!R;X%yXXorb}umpEAObVIaqnIEejW8?dA~XL>&gVIFiQ`Wz>vBXzes(%b>vO z!U&+$1dzR0i{!}@wHM}#D_;Q_pM0yj5om94vOM!f3JwCnWgOCef@s7=U$)kM$~+Ok z+RyxxyxPw={vyIZ$2fd3!AFs*iGf$Vu$aT|qKcnaaCkd3YA=$}7>fk|Vl9W)5d2G_ zjKjae&%5K|@UMdw{7Qobzbf9r<}zPHY~Z3JYVD0y4!08g<|P*WU%EK_uY~_=zlHzX zJ`U3htlHn-&AjwY_Q^YOn}uJyz~#}E8vCQcechSNpKV^HR`S{O%G-e88m6;CA}o1? zDB82Jdszv+Ipd9FtDMS8s5iZx*(!akWG+?qXRDmgN>-0q>0u?is4|(2^Hf%PDOG;J zN)s~}<~ecEa}|w0683&%7NLHG@#FodCCEa4%tER&Vdnh^jY?Z_&+3#Sjj}neJyj&x z`-xh_?Hqm2qc8`>ukK#Qi$|%%y#KL&887bRo#*{}MGY@LA&R$uP!x|+&@t~_l%(bo zNSF84bJyF8U;Io;@lLYQBEFlNXcg~CE#6BeTeWw5AJJtMze%D_<~l!4eDj`@4+^{m zT9Kdd`Dg_PN))gF0GqFwXTJ-y7Oi4|wq5rfow`8V!Tpg^y~A}?8Uta#rtg6_Qb=1| z2`qmt*(sHhi`<`rZ*lLLbF(`Yw_U4*EnH1gc8g%KaV1Nz1uz7_)oekkgcjG;X;z;{ z&1?mFf!1W~Ii%g}B^i4jNdlr*(c+~Acz@Ss~Js4)GRNQrRGwD(Zh%?oZw*DQ!sWL@taRz9^-v&KpmP~~^BRW4$sE2#2&7X3n2(nP4Iv(YbM zC4E%+qOH=L$}rDyVYbTBn~3^lOS+4d+(xKh+XR>s_uun2-saY<8fr5u{g6PJ7T2%Ld7drII`vSly7Gk(|j-NhEGCA>RtP&p}JwJo37=Hy|1TWt&1i>bV?>;G@=v4PoU(r0buk3MP zisrjnxes@4+iQeb;AXt=7b*l0Ma)aGxJ@pxRW*FN#|K3uSoZ;{&}jjt&n6^?76IZ; z+2?ywtLE}XrooCIXhJw`LwrwZ!a=l`^8HNndO6*vi0)<0#|zX*->>b3KWfER&0na&9eJ6SAZ9|gHCrXwhBvJr(qGePXez3fj^LNb7RmJ3#{bcJN)g_SN@;!drCXDw6LxMW1#MLkH zRaf&WKXrM?RbBQ2GUHNL5PrE-n8Cvbf8Dk0H&oTbE$k7!#jAQ<-bt%O81Qo3<(*t% zD<@rE?_yhd(B<`&+R6t&Ut}v^4|((g7q{!r2KIPKa13rnLLWrXXFWJD2 zp3KZ6q^alYQP2rvi_Z|olDuO46-Cpe;-#7uIK^cceEP@0RY-?AIyFH55*0c0O@i*h zZ8`Apz%+3nNF6v0S(hW-)6V9pm@JxBEs?Hi8#t1*Posd+Ns4aZt^Y#e){6*wf^htH zG8KP8MSfdKMdH=@Z7mgRa4TrQjjrj7R!Jct`zCj~6E@Eg_XKPIZ5;l}m(Pr5Rn%XtHs zldj4qeJ1x}-7~|a(}i7}&P{f$Bn>4G=rpftXNf{P=p~qku_wR>i6Rpm#zP>ccY%W+ zLG07=hcFcJq@V;l^~mN3b~Tf{PQ@)+2o+}ZAvciTAUZ=TQnE>*t%K}OXZE0@+PS~LZWt(@@7j! zi%t0sDCg02HZ`Ecujv#GTD2@utSOjMl7cDPSPc=)+pbw0D3~08`3dPtqAESh7Q&@x znIT+ymKnFDRW|VV=#H~EohV(;Mdt`)@wAlHb5ksRjpB^WWqHZPq~iG!YjGl6(z$qSCkB! zt|%F{M)Q8t6(x3%kLFsEHuGNYbnc>=_g;!aN(qu3Hjq1G=6#g7kTt0V4Nt3)oD zwaU~!Yn914Yqe>}tks0<0Tq{XA>Eg+2Qwh!zBEP4CaDzJ(NS;=10YOJ(n}l)cMR zcBQ54N*k8IbA;UMENv45rRLH?skyZ9LpY)3UMb~kY5^9R>Ppi=rc?6b-8Fj?UyzG7 z%-&?SVfH4IefBwKxXwPu4AFd;VdRB?Y#hMT>Qwo^5bgtr>Z8<0%WIBoA-7?pnQ07_*Wv-P_ z=2n^hm|JCb%UqsCxPf!mo82;ZEhTY*U1K^-V5P!)Yz~`ykLj?v_m~cw%g@evaHW8j z8Q(IyW$yi!77hw6^H#0MFuQkM+0f06H8#r=5huLN-oV<-> zXy+2FeZkNLIUvf8)e?L9JOzKzAaX87`?5h#hM8WD+CrLBxJvDQsSrrI>M+P zmo%!!MMep};D0`9+Gky2=fqEuJ|`Fam;2$De|7o!n*4)Q_&2!~{R$O6@2cQ6KcvDJTvfdA z4=Q|7N(;Y@=74DRqpJ@wFxYuD*} zy+D~R?MY4lS3m7D1pY3-bZO6M`h9*o&kS)8IAz_ktWRP3CxMvc-Cn zVTE5aA1~D;Mr-EdWdnzI802x@dD_*SmuW)=6T|QWrq~bI#D2gg_9mOyo5V1zA-Tnu zYP1W}s%7Cj3jpX(;9f}QRh&jEokU$MXi(rr2=3K27S4s`q+)Jt_?3O&C?N~^boR51UZLx(V3%Th+pSIA})`h%%lIp07hOMMJ>atdl z#aC;5(23wJ)j;;5U5-Er;nCz#|M^Wa$Qvl|@ zTh`8N)}o0K!k0l?td)K!XBy0oeMge6(M3WD2K$3uO+t zu}J1XkpgBZU=e_=7b(W;gk`%G;~oVJE8u+!_^1N@O#xpAunlIi`vEjQFPlqzq0=v3Sqm-v#$MF;Oi z*-tg^QNRZk@JR)H3BcBT-01Q*iw>TtY6A)=SHNlo)G4450QbQK0GdAv)73QsVD=M} z(5;^bwn_Us-PwJ(bNc5L@M{J9Ndb&R-GQ6BXcW&rUl-kaztZ?LfD~^`CbD(###YtY zvwtZ1&g|>oqC5N~)@i3-s~C^d`(~$`VIX?H`Au6}I?2eVWLxMB67G#W1t}=jHor=A>uo4=#(Na-hytEez)uzMD*)WE z-vek~hMT%B0WkM4b?e!{HffvbPVcb_`auO;qktO}@L>R3x56~K=ANr(^xfPtd*97{ z=zm1tooXA1d1Uy*dXu&Z$er5G3q{@5D`lff9us{uqB`Pc1>CBDFDl@h0Ib~lnYS&s z&QrOSa;l$PO<9!#DT$S1vgcOz-;*rI8ZM10S(5SO@|2{xUE4`1vq__T*`!gj6xY_n z@F-m~LWZ9{A48eP@G}7Bbz=!bSMjJJ;%Wehc{>$$P+~)bU9PZkmzXQo0pTa^daC}d zRHPj?MD<%h@M=TRO$ESp&jqmS=ZfJg#^QN{3rG;w4*xE>Zvetim|GO^Spf6qDY_3! zx)rLrMgdy@a4qKnXpP{eu6ZAWUb?hvB=_ygv$M8hy};4)PLhI)gND~nf)@b6+gJvmagD5|8aMtI&oi*(Xbcj%(GUZf z>bL`n&oEr5ECjkqo5d>|zh=|U1#BPzJMSZOtTV(q~Y%p zwz%F;tj(N{vu@XYFBs|4I8lmxj%l^nq@Z*f>lIe|9Wi0Fx7ExN-qzGNQCn$!kBLcK z-t%eqW_u?u#ZdkxqpfnGwo@^V1zw~GQk<3YhM@cXZoG84P|Hr*N^jn!(37Lbq{bVF zdRBVV-!}VG8n?rBHEg{=*-Oh5Z5O@8>L=7I3V1^S^i~3|%Kl<2A9zbabD`Eq0_a+3 zfsD7-yO%aj;!w`Jmt0RPJ!S{@S=fDa4j>4wSp~@w+z1YyU%kU5jp_8h@R=m1F>kqe z)ciYO@>a-K1V~`sO1Je8I`1sEcyETD2IN(_C-IXaPPWQzJ!sCWc2BWtYTWs}K##QY z&T)%ZNftnD-Zr;*E#yinbhyRA6_*xqi+3pK9hkgMw>Y@EhRC|y)xu;wuR}bF=C(v^ z&&~6qnysc2Z~o|~g7so*s4wpf(VX=pjD8RwpM;(!(Bz`L>Gt-YWN+9E*)SRkc?;b6 zOeY5GS-;ErQ{Q-4qh1SNtX%>set8%3XI+=bB14%*S=hBlRG+TVkzPu;wYsk4dBpaz zZL?y>8kYDj#DltEGQ~g5C z%xyMMo`4*3YtkL_Ui<)uMVpGBCA?^pfW;wg@q1HFXx?i(VtKDPp%I5LwF4aTDFSsw^DBJ)ON4r^m(M{oOm4D%;K)1@jbW_J$ zWl=wG(h4D=_%CkVPoNJ7p4R37*mat!e#AX#UX3a|>K1F6Z9s6Q3jmy-v2^&b=4s5B zbw8r%9emDZe9p~WQ+!;TEEf|jllwbv>`OSKwW$5BTmR>-W$nwn?b^kui@eO0?!E=m zD-&Jvo~9U9D8SL$S1nw>I8W-G=nA$`EuX31F?sN1G#W^PwrjgcOp`Xzg*3@vEJC*p zbSwTX55SbAE}aqqKYhD)Va8II*YTz9g>tFerNZq^8Jd>?G4E=H{iY1U8-VbW##;bn zE`a|)XKrIHfd7Pd1LOjji3Ko3d`@a0nUph&|K=`)#s2{`9~k$Mo~O}O>f)w1>R6>K z)4wA{6uafV~H|r~@ADRmBfoY{tsiTGI)s#w2 zOiHEvE(=W(a`9-cxiIDMRVdT1#KaXPftSn-{M4Fp1OH{4ivu{3HkSf{=j1zLkFH@X za8wg3hNr0Ty!LKRMqhFayrA943zU2UKi6)y3NLE6SY*G@K4ukuseO_cXq6H8mG*h7 z@RD|$MfS3Gr&aj1b}ug+B@15B4$(@Ef1Nb&s>U>4;wJn?bK6RqHT&j#bIBoe0ZZ$gxOKaHUihxGp?)0(W3uoZ6~2oNH)rJ*Jz+fM<)t^M?n&cWuUHIM<^7B3w8?l#kcS`8 zu^RDl8AY7`R$C9|eNOfuU$Ot2>_NU_|Gc(X$vv!dQRk4{2XrBqyr1`|F5E^PoA;RR zqltvS_nr5+u4$8st@8I#_Sni#qHKtl(7Ea#>LN0^>Zf$6x-{?mqDh~c4h8u25^e|I zIXr1^#Sb*u$3A!72ZXUbWb94SSk7^?Zrc%kP#2!(H6PN&_UPNxZU3TsD}8w%7E*Y_ zZm~D{BRDwX-hY~iKc;)#%=<3@`S7W>ef2>0N`BsDLex!U5dO{(Zvtmd>TVI4u=;B@ ztN+7p_1EoIf5UF|H>K6Q3AgKFQ^$Mw4%scE6d?ELKD6gfTYK)Zx94uOhj}jrrECFD z0Qq@)Yz7V4t-bnsSsr#*xfhH6 z7}D~-AtK`8jqo6TTao6W&Ajxi$0epwUiz^|PSlIB@yz>Ak4Mz;(oZ~cYUa)T zsb`Lj?`Iyrt@NB{fvxmQPe7CsB=aTDDYnwDJxfH1yW>?)l_-6dD1Yav7NxJyc>RN? zQIvSJ{K+FHe;zJxc)B#EKL+a>G0S0CL`U8n@;oh^+swM>;1Kj8_zhS z9RK|r`+E9g-I2I|S;ew5%PPt${EHP-24Gp`vWm*nn1AWg7>V#Nt@oFA_4P!`!-=jv zvEEquAaR{p9_@|{#lyWJx|Mgw+RDTIv56B$l3kH_ZzMT!jzqkjh?mx9wPsH&9_fxG z5}}U%j@_Yfq`Yk)*4)X42ZnOjo+Epz4MSBcbGINTW=sF>!En6O!C)r0JLR#o^|z0m z&oTxvsdB_%>7j@cdBb@?Ips^y>R8>x87w`RLLxnpWc+eUAOytP9roafNyuW!#G66A zYO0?&o264E;Eu@P#FlH{e697FA=hik{+i_mcDol%bT&* zBUzO>_52fPP2JS@oar(#^SmR6E)R66N86p;&h;9KYOoOytO(X#)j#Zt9(J zX4mX|$)iG%96%O0moSDUw7o08tgR>9o4Y&8a}gr!q3J0y80k$qp46Ok*)%4*oa=MQ zV`)3yzBKDJnG9cuFBo^)O%yIf~ z$SQPGmW+q@IL=v4c`{q-XcKC8wIjx?dT|Pf^NEQknKbQA*)wezbmVWldS{$jG-C_p zU|XA_+8OH@x}7>N!vd!QQteRZp1ni6o%erE%wy`82bHw$aum|aBQ|St6*Zo1I0>Ny z;b_$`wt2Zoo1ld_rO#tgCpLtw3kClDBO|zh8g_MWsGSJVh;c0GZ04&ObZY)D|cbz*@wq*aXh)AhUc6+ zZ5HMvPS{AXh@s2PaWw98X3XlFM6^8=iRQ47kZH#;|M9HgTjiYlMVjJJNUA;Zz!Xoq z+IJu4foaCZR0VOa{MoH&&uNNRHaO$XZh^D&oOCZZ;~v|BWzJ(lIe|=Yz@FU(=jVFq zo^UQ9yCu%f*wd|W#+}`QL^9l-!@5)TheLK@1E05@>CJ&9wY?oZ;c{mqNO{{ir`1aE zI-U%i@?^Ht**LYg(-~)W%?^fVx@rfknYz1T37oX!?F8r9g}OKg_DmaM9YYFe!q^je6047E9B7W(-@uDuIy**bc5mvF{n>5BD- zqVcf9S6>`6W%@R^wI=niGtMlUoh3JWpSC+=9YeRn9eaiW4*4^!aJGuI>vzVPU9*El zY`SU(tYheQ=(`L99P*E4MJ`WtDfY?#%TC~lF3E^gR#a3>JiFLk;E*-5^<02MA7&Wf zkUxtRy*W-T5hsjU^*XdYrR}|8humXZP>z;_IwH{=S0do%rsN~hbtDLZo zq1&NXQ~Lx4IONZ6MKp2(K5)dGO@FTYqe!n4&g_~Ux-ZrJu@m=xG#u+rgrhmGe4TS= zdLi0VS&`%J*dgl}x=)}BxB(9NGp*CZ8_5Ah%-}jYY=yzQlm48DXu^(PDEA~zqIEX6iyhk>UG$sDSl{w8zKTSmVw%~z!EQgoBXu5I8nyDK?1`|0Z0jIoK zv`2G%lF{pgF^k@uA0PEP;>@nuVZhj9j?_D3&tk(scMjhxpm6JT#F?qt`MWdr#yjU8 z+X9D9%w~o|5o6gBisU#3ggYFuXWG!8>*0VS#;kfB`p@14Q0|aB(}K$)PJW8QuH6}D zred(c2eI=DglYIAs?4>1ktstUrQp*Erbp#mQY)NmxHf$sh-Y}eGD5q`*Z08(*|eknKtk@8$#_p9l7lC z$%>o=WZKc2%;DE*NWUY-Ouf$E^RZL5$f399HPa6;W@m7tnw+cDiCC<@g8p{foV(nKSWRcDZ@0y{$;@gk|DM$V{e^=Ge?2QL0&<(wgm*{Wvzru_O0B4v#Fensq`F(=1iLk#hn;oV$o| zY;pd>i>ABMZE`Lu)wXz~GctsI;i?>7e9whfXcxl)njQb@1lQ?^E496YSd^B>a(T4u zoHM&-hYv+f*z3Ph?$obhJU?)+Ixss+yZvs#g}`%l>WIse6{w`aFQzc1ew?(M*PEjb+D z=Eg00fL0G}ZH^WJIk2SmwrMZ@%5-Q&XKy^@=-Zwu_D)pJ@vQ1jM&1si9E%ylrtWa% zvY{N#s7x0*6)=V!&W@TgI?5UQ7&asa;%$8)Cqq8N4(B3-EeQRI&k&A?P5I@$eNNs_ zrNQWo!_w3l5BEF#BL@yyEM5H_13eDjxua$|WU+L$Ir$qjq{$J3rKcZ1>f`h;EIH+| zv_&1pUb!O%OHbUX9!Ct8o>;%5XO+}X4p}T+{e63!o-jFNv2@`qvCXM6r#zN6`t7aW z_RH~`oJj{id_m64jnmSMAN_Xz$LSn1S^6&RYs;aP&bcg&opGmc?K)ww>FLK`$8`87 z?>ZgwSlS{{hrh$+h{4j+5lbLI+6Iz+4$pRTVzl(OM?0hVd%ce4Y5X#qLncdK8y+9h z58yc;fw^&7n(=0#^DjA!$E5yFad#z_So9`NqP(ZOud_VSHxQ>UgJXY^NOr92>>a4A z^e^2NrmvLk>g`+F5y9`Ex5E(~0P&ZV;S+pe7C9-}5l)7eBG;>ObfA~RHXMGdE!tSW z(Ucd%j|#@xW67l^txcwXDag0s_12#D9;}tR*Fjk)EbGA^V8$0^60!EB{qeq@z9iwo z@%FBDiQSiXhj&Moh6jgMRN_d3>>cPGz~6l~6$oS&2}B!-$0>+w{aYHgofE3tTC<^{ zu9nKJO*LCX+d@q{LK}9}HvqLmpqgv8G&a=LG&WlJ#%&D^p}Gwlc7(QV+SIVE2E=`S z-j_@J;sfP|j z^Fqz_=huZ=&TFg-g&2{9D98j9>tF-0wX+w$H`v|R+XQ=`sn9pLr@3lP=foJ z%Rr+(qut@ogk_2#A_F*;36NGy|5xDej&m)nJ&fNy43R<>=}rouD}vvYjtdyshW;G6 zDD>kGc4N%(<_k<;e*&g-M21**UwgPa#Ko~__dud6*@Zux(8UmH3Eo)w)Kil5_w^6Z znxI3-A>G|b;VhB7tSc0a#R2vr4yYW#cL@OX^rwh{+%C9{(|3nKE}O=EEh>e?-ZpA+ zs2$($*qvYmaz)X2BobeaetD>6qb0G5mu$qzc8j#GscBnNC|I+# zwxKSxWm|1sYL{hJH`X*a*YC7CH48=4wwjGCM5A(msbxn+B zKCYhtF*!xT@g6bD(eM;>n4DF!8WGVufIqEX$Lx-j}#_nGn&(_2LJgLy<&3&;23fi)0^~Mo7gg zOHzU?Njd$qVpZ zy=km0LE7HejsC@K7Ksl=I=DyqYC$k1hr%73+-i+c(zCVxoQ*sbj88$@)V?c5#~ON0{r z%*?QT-4fp$*&_(JLj1Yocnryw+LRb*Z^xhOvdiq~Q<_9?aq)abX(@{Iieb$=qNm?v zXtVkl-5*Z&^~BmSy|(w@G%-mTpGAiH8PYb5c)L=2s}r=W$6w!IB%M*fnO&Dc#(D>O zkch$virzR@`a|?VIDBvi+ZYG>G0L!dqL3oDQ06DE&}SCEQV*v2wy%rzcG+!#pNPzE z67Nu}!{8V@h2f(@nqIPrEZJARF*qNdG`G zL;^&DPp=YX%DNcjJUa_#$=oQ$Qlv8li9?SRywXJ5FuTdvwj>x*eIEkTW)R27Wrt$r z@=|wCN)jSG!gF1U5Q&4BPHafq`v%Z;b|n@Tq1?{*UOal`?l?gOFsn~HYYGEs)Fv@S zzCwm5|6mSF)o#`b^Y|==+?9-VhT7nc-C`u!m0FXf>^5ouAt70{)h{=1M>W^9=OhklGixNycJ~X?NpY*|=_IRWRnGWlZRDu+#c9C2g4==t}3&m*; zvYSBdq{){fRcP}WUo7K#+WJMk7~UoYEwwsmsX)SUQihlma;Z!!2(dWKREVF;4i8|X zFAfQ^4jHnE+$B`6H+o0 zaw|`=B$-lL2;m;<4q;s2wByWWl>f1zN3S3t_?yKHt6#A|farmKzBJ~EL7|Z(_%58U zk%=0?1qTj=O|B%MQbCUJZdjgpHnRVI;d<*|p@0D~6OGtny3 z;zPs_F>-Wpk-f5DE{ZW7(s&T7=@1r2x*JK7RxgF$WCQ|wKle6sa;7vtYJKycNpSjtKr1 zUKdv9VnbxD&0~EbJd2=(2abpm{4ylj!*tIrB;*E3)rOM6y5sW;to_kkJcxDlYUIK%|PC5Z=9|+-(2jSo|(zmArYq(yd zjaV{CG643+^v z)YI?}C$?Z*VA&4oJrGDgoFw4J?glZKM6b6aa^TZ$bYK_@YuLdJ;$57?77&|8oF?Ez zG>niJ8zP?J_?a?M(K2J8cMG@~{-ALjvjV|5TI)#&o6r4u`M8xzY2SjG$;}s_gm{_SZXvFg%QHNt#l!v2~Udk8fi{dNR?=VQceeQs;%}a&ZOw1 zRo#7<7HH4U6Elrj#hF5llLym7rfwjG%Vd7esNhDY5!rE^A*&RHBx>3*x8YAKCNHOf zh>(v9wcQE$1NkW4BNi#-7pqn^Ls&R;nc%^JivrYC303igtss`X;_(FP(kDyV)})w= zkOrX>=P3YUa$_q&xe(*ei()uA4TtpP4(;Q9SWj$DU#pJ24nA3T3+=BsT z7IB)01C!2WTn=9_C>QgIT?m3uxnK}wn3+;Wy%-uPSk;&`TFgr#EAR%<804E@Y<@l1T1XYwB#TzbE(|d@_Rz^M)MLzU+EzG1dN<6Z`{u)n+aCSf+G0X#P zbh^~Z0dk+JO5)&17L{8}2|S9VG@b{AZy-v!1CuK~P_cI@s?2qgYD;{G(k_qawgEf@ zlR1+gSJV6oAu>cP8wSy>l1GV2T4E^vcmyQ&#FAK2iCFII2_qUQW5N%-U}gn7UHUn^ zU8&eNA%N)+kB@t~*xvZk{G{&##;)7{dG%;<+ zr_ITqXkr!it*0s@lTF;Yl}m4jS)uzfZr; zrLXrCR@D?%@On^z)>l*Ltto6I2_!cuMbXDsU9ylVx2CWu-`i#l&MoqrQC-|1YFX}p1!HRF& zu;&Ku0oTt=CJ@)+e}|$4{0$|*Y;R5BVt8vZAsC<(*#)p} z8er)c3tJl7XlhwIIwE`P>?X;x3T_%dA#`9EZ!nMkwY}c8M!rX1oiwI*8K-)#HC$!xIUaq- zjiAfdmzEh*JgD+Kg1XJ9Gf;QRwNURVgPNXoM&3qJsMmWRU1xaChQea0a5DttdGwZR zhm1*kAYrXBsSJo8>sNSROu=k%&xJ+B-d1Cde$wxS=((PikW2=Cbg%ar<0Oy1G|3wW z^&K~Y0X2PP94{KpeN?nrIcSzKDYndA46l4`3Yz3u>pt0-?9m?`hyv+mF1Jhn<796c z05=@083ly$=zo9LwH)=LG1a4g!420G+(oKBG;l2m^XMaapCD;Qk>~x!Wc`Ibn+=ct z%%sh5jn~s}kiy`E=`0*^i=ibk{=C#^NmReq2DqjyCSET7t&G^Xk|7*V4@f9hS=!p6<83a+{D zO0OTdA5LmDykoZHfs~fqXSHNwwwA1qa`V$#;?h4d6h(X9(roP^13z}xyiMcwO1OVB^}Tpl%w^jADWFsjb~vc2MOqC$*-qXS>gh{(Alr1@HRsWDSujrLAm z&x7}psHDsoEC`?}8hnfx==d^dr+M@znQM!Np#+zET!CrEwD)Bzc)txLx?a7RnDn#D z6wQKZhVLeDZZ>>(8-<(iCMu8qt-VS29K&^udotqThpfyv4K2Yy#IW}0ckV57&oDIo zVRko!73#?sUHMo+y1n+a@hsDfB~x61>4t&spX_m!&4f?AQ3Ihd3xlcD<2tq2Sm+rr z=6hZ==Hhdcz6bGLaSuBE@}x1#TS_#mi;Y&#ps{dx4d^iNW_r9Q8QYK*=6a5h6F#!n zwM3(E`7QGngCS{5UhAmNG+f6o@Y#Roi)ptf}y#S;z5HKXilpj}nPo?4`YwSe0(@&-3U zWfJ_}b4~UrXWzo949}&mbEX+Bt}~_?>j#WQPlMbQK=gRaFbix!YiP>26j)lLk{tNpucyBb$_UM1T8W9SoEI}w}QDZSA zFCw#MqNdfD^?vH)v%OaljYrQbGtSlrI74~?hM?+3E^CoTzg{ad7JnR4{&w{!J3o5bg6)`=)rPYx386Zxro&2DI0T_LYsq@-k`W%Fyp6@ze(;F$__X1~A z)&CFtFfKzb<316MOL8{|lUxP~AwwzM%nWASXU5E6QkWBi_f%2N`hdWurd zGlYn0DwS^XP*J4cT6=#!W6j6e|JVQZYQJ9Qobx{4^IhMy_S%=(bIxH_b=L}+LJH;GuE1JXc)#aN- zT=}SJ`H`8n$i}EKE!E7uz2*R2!HiHlbLMchDJ!Nz#G+ZI3+DJe*Q{dy@MtEzcbZ}j z_dH9n4Xvt{S3Y8%-%hQFS93O(uOCs>oLWRY5z)PT{XykB6qK)aP5Ia!=1{WMoWN9# zIA}J@`Vj}s(Y#uP9Tg(hMO;0ue3^Nsus?DRo5FUO!SHs@o2J{dAhWyvBcklp_Pk?D z`H^KWFssG8coOEvDD%5^xzPXq4)c`xEzJBLCd(J*G`MW2Mv0bOe=!na&$`1b5uu7< z)W%l|a9)f$_w>i6lrqkhIG&Ba>UqPGK)Qv9P}LH5??i;EyAMn5M>zc|L31Y})WCgM zazDbUrv$zDbM=(=i`|DM_aj1$OYXaOBD|}4uK4#OLe0-dBN3t2=lMlud}^9!xbXVr zY_s0YC9m_As>bV{r=ie5GlRm#uQsW}`S5`Jb|Qw0&oL{mrZZ1?J@oH@{ILO^8sJ}; zc58%cm-NhB0`-=HfPOt->ZuW`bzXeefc)Q@JT;t=WB!}GJoV1Y6YqKSdH%Y|6K?#w z2h{nnakIxQ$;0ctGXmmIn#geDKgoE_(7El7*MlDoi2pud9NrCx-w@yl0eKn+%%513 zr$*>P^OK7iNVBvH$n&%}&h;4_%Ei4K&26}G_{hYE^Q3_BtQg=k1M-gyh<_*`zL}|~ zrn4X8_4WwQ&+W%}J>8B>jZhu)(_c6b?Gd0xs1Z3t=g8PSmYsK;Nj(v1^O;pqvUE4? z+Qn`ec2=MH+h4AP+gLlR=|kW)PZjfzOCsFvS?zON%Ht4X&F;NlMw~hC@fP}acr)?u z;2p%L_%9EcD=OY%+hyM^q&e>H?H>v7_X7M_fP0OaAGSREZ#aNsORtamxqj$&`>_kh zkp8w=uXf=W>U!jn!uH8MDqZHi%72}El+^pdK28YH_zfe^YF;`mUwqO{!5(gR>t_*{4^Wd(s8%lesFD< zf7`NoVr&8|xlW!KqPbltc~~d^wx#`j#mUpm$#dB8OB_GtIOl+Ux{;kYX0iEQzZ`D2 z>r2f)Zoj?Zx?K-+^0YAVT&{<6dtuf2ju5@rLEJ=f2ZWnLjL>3xxKH3+dS^} zUKy{`?WGIc#<#+Kdouv{*{{atcw?6l{*5=DoP(BH!Zm+?C%!H2+nXmGZ|C?i$J;wz zTjme9lNREu@tV%gd~mnl5fa}8{Tl7WyZySuaeFN0vQhGE!xKB5c(>gXPJA^cF}G!% z_0_@gHqQFxKFL1a&57^m#HTv(cK>!A+MDadyY)Qpcqb>%FOnw{dCFm&I3MP)KjQP@ zYv6WXao=m3+3vVo&tAvv9OCkq<4uX?HVFq3*7FG3%@ltU{xDqYSts!?A%2S!@78(1 z@ltgGo#!1Y_>I|k zcYbaO@G|%nSK|i;_%m=j{%-wS9e3;B>EyBVnf32?;@$c$#tDShb35F&>yBrk6Yp+c zZ#waD<~3Y?a{O|lxvh*7NSnW#;~n6(9$P=RqrT$YjxwA)?)EZU;<Ov*6#W3A5NYY<~c4G-~hw^{)8u@#d&(@hgzS-aI6E8e#wNgcHwm85{o=T*vc$xQ^#8CyzUx zU%+)de-h_-{vpo(R=B`c<)8n!<9Q)m^S2hazn|MBPMrDs1?0a);<>&ih!-ROG;zky z6)%tD(-Lvkvj(p7r%>XVf2(*Wb%ws; z>~8{G`-{V7$d-i=uhdm2Se?J0s{e|9seg{7>KPG!1L}tYd@#=6H2(7dzZ&OJ8oxQf zTj4xP<5vavi2xsr^B>Jq5a8xd^4_BHNdf*^fY-!vU-P5|_y+;r9LFim!{e{|=K=9G zu^-lW9*@*-3yA0bU*qdm2|sS>0lqW9FRdCrPi}x82=LB0Dc3r05AYWQyarBoHP5^N zKNR3SvBT9oD+2sPfDgr=)-+E+fS0Kmemrjt@Ye#oj@{9kMcYja@a+NKw08JBa{~Ne zfOo|uY^`Tvfd3TWG4|kR7R_^QfWH~w#{+y24q%#pc7T5p;GOKjEKHqC0{lpTH^4zo z>&XuAq5!XpgS6(!3GlM^Ko_R|>;T^!;I%IbpJ#V~_r%GZ*7;0;*T+er#xD%;KLb1! z7rQmj?f~x-6TV+B1$dLj;p3ME_`3mqYm@MK9tiOF0=y$mjU72ul!oEMI@o=z>p=f6F`tF{Us zpBmu11H5PJ@OfSc@cM1S$1e=8$Qpd0ACy6KLvQdcH#3c3h-S4Uao!kJY55P zVt_vq;0FS{4t{ylc`_`(?+Wl&1N^T5?~9A_+V1oKeOzP|MCEj=@P#Fr2+n9fM3})e4hLOKNH|1;=<>7 zA;2qN9zH%Hz+VdR?%l%Yc_F~R4DfnaoXdk>RXrFI;9CN`H!gbG^@v|py*w`m_$58g zwd=;O2=L+nZ`m_^p3DGW=Qw^v_7cqKbuN$VX99d=eE9eW1AJG2$M+7OXH9??1$du6 z;qy!j@JUyOkN-Nruk9B;ez)WJ)!Ym0ebu>m*B@~lzk+*#P5PgUcYSk!w;2#VKGSjh z3ho7d8Q_-=JeS9f&kgYR0=&xA;qy!k@O=T^aZva?j|TY30Kax{_&oCi{Otfg8{plB zgwMY$zz+m?<7>j_nHk{Q0z7hP_&mu0zAnIj4)Bk9s!;a;2Q$` zaDdkv9=_ch1AK9Sb6;(@=^B1Y?`IX4G4 z_-XhO@rrl&uv&Z+e4Tht_{-uCz~2;K4&N#MIQ$dwXW(CpzXJb7{2lmd@x5^Seo?z{ zJ$?b_--GDYF#Z=yd_#C^@f>(p@%ius@fR@uH;BIsA0vJoo+kbse46+HIR8G+e%+1! z-Y@Z-SF6M;Bc6ZXW1jl(HzfXIINx`~_)FoRNPI{5*W#R4zld`lRw-M0Jyu7aXz|wY zrsCJb+ldc`cNQN2j~BlKK1h5joPSs3IE;mllK3<5@#5T$_%@~VKVKAY4u4(zdboX`wq00HU-(|}4)AZpyTFf&$HUKxa~?)Tly0{O@zLU}znM7e z=lkqf|5oJbDeNPG$ETp|7n{CV*e@OQ<3h3|sf z%`CrtpK} zt>LG{yTj|?mt;FWwq2gjbQGV0_@Uxi@EMM~zi-|R=X&Xs=f7aF_}v(vl}?^&$Zc;P zm-rVE|GX2=v9a;5IPvzJ?XjL#Lm~eCn)Q6O()V{IJ{^fX&QTBfd1{G|gEtX>70&lPGS6Q0x4RQ>>raUH^T#`G z>;De*407DYFGl=O$8CJwW#)%jZgSklzaMWk6dL8Ymml>^aNNen_4dL;QyjPPcjx(@ z*{0`x!W%XAu9i#7{x|ddF@4 zvx~emp^f5CqF?VgUeko;R`TONbllc+@JiqJijRSREusHV3&9Sjvo~x z{r1^k`*~Emv={#p-c7s`_NU{;pN7vD-vNJA{2Tas@k-b)>=7RV|3bV1*6R=AliM|>R~9~b`@9{(l2ACFtv9fnz0PbEC=EZ!H7 z6_4)`{|t|pir2fqukR7@o8TM7Ux2?W&d-@1g4-Lr-&>30^>^Z{;YY<6!~cTYakJ+q ztIR*U)JOaD)jo%=7T*RRC;k)sF7eaw0&%`C`dx8;4&^Ixz90T?alRk^B3xi%{rtVU zn>gQ3J6N3WryV8E->dHs=lh)R7caI2m?dAF??Zk=obMk#B+lPU{}ku@PNQ*B%l`6x zr(MMPzSBW)&YxE>A8v5scmz&%ng1lbn)rKYx1M-3yrFn&cvJBn@Rs63;qAp!;C!DR>zoC@ zLgF8U_ZEK^K3KeMu0Nh5#1A0;X7Qik$>L|>tpm z`@}QhE5!@pkBdJDUnl+q{3Y>bcZR&>b@4Y5|CadY@a^IuC00RE|XcX+Y*5cs#^ zqu@V@XTeX3?|}a;z8Y@6^vGMdz6#-d|0liATtBXX#1|vJrFc`scNK2~?n{Is ztoU7s?;*Ylezo|M@R8!r!BfQl4bK$+2tG%A4}7usA^5}MU&7al{{VkWJT%WA2mAfQ zcH#I`f&V048-7OoB6t=2QHpt*!CQ&9h4&Nh10Nxt03Rnl3VxgTWcYmXZ1^(qS@0Lc z=fk&&FM@w0z65?+oOvScFUih0KZy9c;w#|I#8<&Pia!GHCB7d%O#CbODDj`*lf-|A z-zNSie1Z5`_(S4VvE4l(UI+f7czyU*abB0+FMbK)Pl(6DBkak&GyYxSwZwbEn~L{? zcM=~8?<;-_e1!M}_-OHs@O1Gv;CF~`hu<&0g!=*USK*t*-^coTNBl{6k@$1)&%`&w ze-PgW|4V!|>aT!5Hgmth>-@FE^AH~+&i!Xc@eIV@EdD8coOs2%{rQn0ei-qy#81H& ziu3PuTf}3K|KH*~uI&=`=58{uCGybYNe*ZYmw<7*V@oVAf;#u$<@f7$X z@d@x1;&;OH#hGWTcpl=v5Pt%GM4Wj}i?2j{#k!@(p%5M=&O8^3zlr!Z;-A91itn25 zx7SDfAbg1Um++C|U&AMe?|^5D^Y7Yo#5q3~i627!E5!MC*eAsgBmPD4@8PeDABXP~ zKMDUzye0Z|R6G@aT6`V6UcJ)m_c?e|@eT0y;+x^!#ovM7AYKoiD1HY0nj~HZ@$N}S`#T%7&wDE@UY*p2Tzf?-%FzJS@&}cuJhdfyw3Gv^Ev%km0+27OR>~DnzrH>1o4>iP_pxuVz>~9P4=7{ek-Ui-N zyc2w&csKa<;(g$W;ynIN6u%Mi)5MeEx#B$TFA|@C_%-5F;p@e@UN(wzJl_=O{^tX6 z?w|LHbH7n6&i(L@;!9BH@8X>2WiBc`AC@A%s`x|j`r_>GCE}cKvErO>SBSHotHe1z z!^F8?x<#DlA>+h1qW&!L*WkJ0?AIc3_G`H~`}Mdu`}LeS>)#}P5cO;m=RDsj{ww15 ziSzjTKk?rY|A%>Xob@yjZ-n?x;*H_);vD}$;@pm|7w0@l z7Uy;}S)AL^3~_EpbH#h1&ill=Xm~Cd=hF5G-x?eNl z(c&M#W5mlY_Fvyhob$hnIOl&KanAp1#JNAYNxUK2O%-nePZJ*qpCLXHey2F=zfYX? zKP=ArpB88RFNtTM-8aR#pV=pVH{!n*XPw8yS0Vl{amH6_T6(>2Kzv>C&G4q;th2p1 z{~p&}{4?YkD9-pK@!t_YMV$5DCLVR4-=F#77s8i`^K*Rp;%yQCf;juTS^O%*?-aiU zzE6BO{4?>v@WbL`;XjMBoGeAoUR|8y-$0ysT8OVgo(|$X@9Hl8FU0p3 z=Xw5caUNf86)%J9y=mfaApZ<;e$Ha9_&&tnC;kQeVR#ucd}aM1^nR|B_^NsSlP@`L z-^x+ezR)bMIBt&@a}ocR<2L>$#J}sfjpupw9>?*gc=N0|{y1*)aQQ}jDV{j)xXqIQ zKkc~9vk#pvcZnZhk9XF`NBEDcitmBfciiUB_rpU?9k+R|EayMbMtmQ~p?L^H(m;kn{x;P*Lh>xspBf5>rL z58wCxsQ89Rzuk4>{GRSY@zhFw{A=QG!`~KfWLLCVc8br0?-9Qp?+^PD&h2G{pCb#}_khQUPldOIv)yTE_c|xuj&laa`Bum6IR6WIQpKxP@e`$s zkAvrkzXQM9aocVo+P%+l+wR3x{rt|65k&0|M*6HH2kReVfab$L1?#J3%?<@yB+N| zf^+{6jri6Qe*p2lop?L`g&6;Vj@$A70eOat_r>4WZx){pA1nS}_!RNh_&e@Q$89~w zP|sY)Z9VrOevx=F{6XO&C|3~~@_(8|*xD{dCzJs%#KkOZ|{3Y=roClU~ z{9|$cUV2D;dNV)I_m10oicru09Jlp+i}*jqhvU36qP3r|vbpi{9XB@L2J+-TXRwIBxqDQ{MNh9Jh7yI674PGVC`;ir)cG7B7TP6h8&e z5^s&|@J`2Voe8LOq2spBg_u{%#J`5G5%1pB@9)#%E8#CWZrja6yPF-i?f#1Rcf^Op z`T0K-Ukl$WUiNZ7{&VpG@bAQ*fgcmU4D0uAIJYl;??zM`za7rQ1Bmb9xHr$y-=2=! z{$^pl^cUy;@jAzC9)4-%t&ZC~qp+P!blk@CdmpkKxAEMba~-$w`4!9$v)t>rjeozL z$DyU-T`(?>Iqub2(T^{1+~zrhJR8K=nt1$hz zMEnl;Gm`&KoL9W<#Cz)z`FA>Q^S8&i?GYah|Hg5frwDnDI&SkE#^cktWq&`$d44_2 zU-iy#&WD&vet&y9Zu9rRO8FQCqs#GgiEai|mx;fR{yr^k|G#s)yehsG z{=WDqdEW^sOhLaI2o>lu#YQ0>*f5N_v5l=*jgcaKBM#Gi$)5pUSTkAGTx3H$}| z{qR@C8~60{Y!jad-wC(FV(Y)k4-f4VPl6XadF*^Ua-aXiPvR%xC&mAUm&JtSc67o0 zex9o0{65KO@w$j_D$c)GwiD<3H+qR*w8U?BfOsS1A0a*zK3aSfJY9SO{0{Nk;rEKq zgD)3f0)JBcVR)hV6Y#C#-@`u;{|)|$co~e(VexA4)>_8cfxy% z*RU@%%V6if#0O}^B#%65#ztaaXX$5VLX>PUduQ? zfAN^(Hoks;FMa4q$8CK1hkbw1aU1^<;$L>$#`EvgZ;JoAz|ZqvxE(IruUmZ%edom6 z{LKdVPn?kWfrvjVz7ZaY>sTEB-Wbms;(Y%@L-Cst-%5NGyo>lWcpvc`c!D_Fy+xew z1DPPc1bH&WnP-mpdc@x+&i83NEY5b<+#n0gghI>^Wd8uxB1^do_EB{U2UE;OA(yw z5tqk8--r+P!$TEt{g3fgah}{%JPGl=;I=$le-Y{&EFOiO^a#go{i9LmDDnTmCpm8O zCm>I@<2FyLLFR{9W{EF{&lmp%zC`?Y48$78ZM%7BcfI&F_-l^adIllScE@d=V~8(u z+{SktVt$zAfcPT#SK_?RLg^ZViY( z=)~LlW2>4UW;yJ*t$)~Xk3&B@ZsU^>f822!zaH(L7QYL5Dr3jU{_^{B+lZg?n+^38 z=lShG@mUy$RPnLcug-$o@wfBjt)+eg_lWcRmmU;fo#)3tF3#^g=Ku4>{Ldo(b&1~y z-y!}6e6RTX@UO)8!G96|27X5T2Y4l1-(sD=!|RHdd%*8+Q}GMovEt3)J;eFFWLJxK zMEpqcE8wZ(gW%cXH^S$NkB8@p&xAiJz7YPLcmvFn&Eo%p{~;a$FN^C>9Oq@oUtK&O zevx<~yruZ-@Gj!-!TXAT1WyqE1b(ad=kST*-@|8!{{~+nz6RrvFMbL9dGQwT&El=$ z+r`_#_lREw|5AJi{HXW{_-XMm@JL+$<9eI~uOprXZz4Vu-d=n@yu0`^_%-4^;Wvt3 z2A?cG>>+>qoi2V5@$Y)uFZ=`XH{hR$_ju6H|Bd)q z_^;xR!7JkWE7#Yv@Y>>g;k=H^_}}2|CB7cUvxj&~_+ash=+_AGqZt3u;{1C=y7=#i zzeAkYC+`*Kb;af4ysr3^_*m5Wyg2LJEY5bfi#J4`J>pH^hsERIzltZo%k}ctKi3QU zRYRQpx>)>q3Gg4q2f|N@Gf##1((7v>;-kblJ`Ke=KCQ$#K3&D9BL9`*9JgWO za}hsEoa31x&heZj&hcC+z6JRo7iWK85a+mU5&sf--WBKg?-pmCV)3%rFMTi0dQOV> zLVT!q$XmGGb%IBUcZJ7@UjgqRUI6bVo&oPKJ`;YO_&xAs@#XL|aqh2f7w7(DfjIXk z%foO z-U#tc#M{8zi+6)}7ass0D1I~idhs#vG2)r<4Ds#oS>m6-7m9xeUm^Y%{3-ETEBx`= zAl?xEhIniEPVqkQ{o=#m--su{Pl#v0%k(Y19_PTTi{B4#D1HduTKow7a`6-J{^B8Q z7bC>0!pDd=gijS83!fuC1Ad=)E_}84M)-PhZtt&(b9>(@z8%}wUh$2XC!dSYh94DQ z2tO%SiAs!qxc4Rs`wUow)jwt|19xX z_(Jh3;48%Y!Jih-hrb}s?}d0>d@>mMo3`jf<2|9ElMpCQir zbHrJHt~l#oAkO;p#aVxWIO{JIXZ@SRS^qY1*1toX^%se={{7;t|Csm)JU%799*@0= zWA1bQynuNUX~FS5@F?-dSntu|te>CLWq#Jf>&kT26EAsK&j4}OlOWD|MvAkZ4DoyX zZiaHipMvL#vz`UweE(sdIO|y{-U8!RD9(B|iL;(<;;d(fIO{1AXFdDHS&x32IrD_=Mq>YDUuN%eeMO10-Dq*HuUK)m8z;`sXT^(i`x+oV2lF{WybRXMNbwr* z3~|n{{%{hP#Df06ian4kN_%VPYC z#iQUy#Mxhd-jUlrW3dUC}%ZVSYDK9eWD2ai{Z^L!>>ocs9#@iIK#iSvABlQ_?3io{v}esR`cEYA9m zh_n7<;;jFaIP3S`d~Y^=&MVd*iQ@^K^~Z>_{ubh_KUSRe$BBQ2`nbPjyY!I~&;BHd zv%llT+20It_BThI{mm0+JuAgoPrf+oDG+Bph2pGdlQ`=s5^smLKpm3a1dfjIk{FV6lJh_k~E|%`x__D{>F>5 zzXQbC-z0JNcf2_Jn<3s4>nle*9-b%8@mVR(@yQn-f;-S^p_<)*p&2J>OV=q&Vx35@-F<;;f&aqvd{p^~XtkCiYA5;;d(Y zIO|CgpNaJ~Ui=<-hWHYAjyT6BPn_G!N^#D^d~wdh0&%XFLUC?io5VQ|MdI8p_KS0z zi^X|7IwH>f{4sHk!zpp@=lTDKbNzC?L{=(2uS$-0;=f?Mw-B$6^%5)2{Bh#hJYN$3 z8hPCR58XByf%qhezY9KI{2_R*<93rO!g<01@e8nj&l9f?Un$-go-f`9ULelnT%kCR zTbsmxL!NEoRk2^#A>I>SBt8PZUwjt4Sp0SP5%II|W8#sRXQ#xg!}(z?JKt=I_V7si zhh?+SZ-VoE{nqVUZ)0tcSz0*p*7<(jSaH6uI8L1JkBt|viupW1obMM+67T9&V?GZd zj<;EcGQ{z=mQap(ALQZZ4A@`hSt;?%lP}IZ1>(bzzfhe0-6UQU<4`1?iah(pIsV1s z9RDNY9RFkD_0jGragIMf$H4JPLp{-WUq7Ao#E7$=7UHZYR-E<3iL;&ran>_Zob@D$ zv!3zdtS3X9_2h`No;-2Zvr>FE#w}m`UU-4{A~-*9!Et7u9TLwxMdHk}UwkF<9}DnP z;v7$YIEwXfJR|WweLBZ8N}S^vEza>Q`P_!7&xWwhIEiOH@#3s!fH><(5NACj#aT~= z_`4Xl9Py9gx#9=m3&dG}et;K=6GE z+kcVcI7E2y`^EWrkYdM?!izs5z7h2ta~xC5d*+ll=UWV37j16c@yv1D9XI~H*v7l# zbIOT##~~K;#m2k+9q+i?uR_P&`kSIL`?OoFJXb zGjqc7^i=Peu_>dcjY~`(JvuXGdZ=A?N=|ktD|>AEwCqs3%#_K=p0vx!OinYcO~^JG zGqXdP*(qKdV^gLlW@RTEX*VW)%9NBeJe4ycTZ_v|Irp+D$zzhoj?GLQ=a@}3AuToC z!*IQrkT!NgX3CiCP{y?EEWbmxmaNjnq?ih`Z_7wA5nlCv?@aaMEcuVJvNOFGncI}i z%=FAqVq*5>EZcCREz34AW_+?AV@EPOCvobulxZo6rVrCHO4`dT&CY1aGj_Dh>hada zA>6s~siQZUdW~QZ=s@M+2d24M_wkb00y!B#=_SVLDGo;feC!Zfs zvf@~VpE)ai%p}ui4y-p>N8>E^A8iWb{bXHnM zrrBOnL*6Ty*jp)MGEor+`9(^4mlo0bVpo}8GGnLZ{ZD=X2?u2QRN@`N-( z%J{_8%;YKli@3_uGt7&UM^83E=SnMCCGFBin+Y~H@VQL$T&c|sE6rD~!m;j*@+a1W z(yvP%J8_!XO_@+iaY)aOc(%ncOV>SeD(38_9jPZxbO#hV3w3O_2Ce~~&rW@w= zwkh^DvH#$qeR>a09D3DN*Y>+E@w(o92KP%e8U67$!5!Ll@b_o`^r!v)GF;jyl`8rQ zfA9Pxu2=9$?AG}(bgj8(&D}TKC*$ppFpH!Moixq-zh2MdKT}2V4sMT|*V~-&;<2~; zmGb!1);w?f$zT8Nam+5Y4cbVPrquEjI;8Ds{r37&xb|1x;kTcJthRl7T+{aL^~!Ml z--h;iK7%wR@8jd+DFOXIh4y2ya&7zeIH~O~GmVF9KLgiI#<3yX>Ui95UL3CfEplzv zP$=UYf~UjLKK6XDulfcCvcO^j{d9{08VMgikrRL2CH zh39YnqjT@0vd&j;C_j=z1sRk;2~F7n$i zzzc2r_EbmPKM>IWVzkfm%b@o61oXcU?H_a6uMwvG#pd<4CQMT{6B=3Hzsq|0gg*Y% zJn>InU;7`v{!25=|D^p9|FHjdH~mlAZynJ8B#giA8Fl{U2ei-E=bHTPqOX6@OkO)v zJGw#UK3~uGNAYQYR{O89_K}%5)^z@CYUsbhlvire#~T7(zxn_3^=C}>aO1xXueZ;+ zi$1pB-^xC@aeVz|UNFUz8r#RbKHT=7zu1r5hW(h`{x3HF*glVc{fuc&+tkbq`!f_8 z=l(Kg9&7Ag18VklUrw_>&G!Ue>EH6F#uga}SAWtIe&om*{wr<$P0T;7zo`k+oc0y( zZ?-?p{u;jz`j5_!Z4}V{Cc9&|uaEI=yyHhRb64B%fc9hku#%q#cKCNMe7J4$^Dz6!Zc1AJ{{hN6lji^c literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.o new file mode 100644 index 0000000000000000000000000000000000000000..9746a2f3c42efaa31caed4a0276ba776cc48eb69 GIT binary patch literal 26976 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..e00eee56ff6e7492c27e115d176ee553e6dcfd53 GIT binary patch literal 35264 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 TM*2(q`5oXl5e8#md;b3f7=KVv literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o new file mode 100644 index 0000000000000000000000000000000000000000..aba5a6cc4b15f1aa0bc42a782021e7688ff485e4 GIT binary patch literal 57184 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 YCSZQv^vJ&5^bLF^FdZnm>wo_L0m(H1*8l(j literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..49a58233ae6aa77e94160558b2f7e61943a7bbce GIT binary patch literal 53480 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 z zV`n<1F)ZEh=$P`7DUZitpM{^-Mjs;c8=cx+%;uyqX{?RBy;xg3dkoPj@$5y!qPx9h z!4uDxh{aD z7k3!gJ*Ls6X_+yU%{#`UIX1tJvpV0V>p0(c(G|`Eb8LPc=kGPTjWCwqp(sc}rB%c{yLJ0*jv&ywA!C=f@AuIl;D zWlnmQyr6xRP3QV1=?hjn>8gDVxY?%b_9-j2>3Y7t?xHLE{7$2Der5aJw#Jr2c2irs zi>~r@$6CRm@|z_u7;}qF*YkC^n=bW!L!;~MD}9|UN6+u}^)_A4?{{5vmEYGjI^&Ug zCw<(Oqw77c(RKV6T=WKUxiRe%ww$4oM!QEex{m*%^f$?FI{v&{#l?!Q@bA#*gr`BU z8Q<3Ey58(h+H!RKyIk}dDd%yGuD8cgx7l)Z{GZ-n({=nma?ut3f79rMr$$_EW(n&Aj`HHO1U%6B86P=zLsV!GJJVdAG zL2A2un>Zpm{nYl23UNfV(Ta%u7d~Utb@`1R^j8nr{JP$uhhx*{lB0&rji=m$e&io) zejVoxUy4mvep4Kh={G7>@X@=PXjAkT@p1{;j=1Q*4G6j#>nQ#&%JQJGCvA%UqP!oI zzo*l`D*3c$6fsEWO>ueYjyc=-X+ez>7sx0xS*@Cn3A6>>%rqL z{>LT%Kf37m$oirDQ+NFwA=Fs+{RVmcWEY(c1==zfJw(8;-70pLoEk~*wO+{|rI#8F zwkW-l9;H{(d#zXUN9px@=#}&+y^`K*y^=pluk7TcJ7d{1B)pzt(Z-bQM)~klvZoQ!-kx{qaESdk_>aCG- z+*cyM^S9YPRI3{*$U;jieX4=naxC-6Bhl8gR<) zz@mqw0rqQhs9bX8`7sxLzC6#8dn!NK6qyoo(bc&B%PzVae_zn((v(ceko^kDmsw(Z zu0~g7M+wCmeE@TcKb0C?4#7F$A&o9?6-<9zqYu*LJg3pqG`f*fRlaR=PIdX7>YPoV zTs>>SvTZxc?q0cV$L4AZbZ)NLQeKspTTx#9=^a&fFWXyPUc9;N?gf!sD#}(A?w-GC zPp__@<+^@W{*?;IyHWwUF$EYoWjnTSFR!RJa_+3!v8&S9Q??=VPna&$y==Ch3(O@-#cFuc)*vS$xyhUR^&s>UwF(D-a+o zc?AN5C2axaTQ}WNwRwBFk#kRVRrTfw_ItPUo@-jwjxC$3HyfKi7QT5|L3q>6D_7pK zV%?^71nd3DvcVo@3eyZ2B{Tzk{%TQ<$gTd{}h>y|<& zSW!%*e05E^AbKm93kBkOFY#_!tiY+0#m|GJP0JbJCe)W(Rxh8GU(U#u?Jd}b)-|8- z#%yR&c%dWLoiWrDHepWLJ=OE|lUZ~1vwXdgfB56u&^bz%!6D?xNpX6{l_Hxk>CgD7U@Ru#*hoL|x%EE_`w)vhhR3N<^DX-8j3MghB#X8u zJ+40@uMaVo{YU9n`v#BepYyn0*;v z8$@iM5;J!vC8X_$f}IaI1X_XtD6u^b-F` zCDVof#TfYMe%)LAe~f{j;uH$E+CSid|3WYE-=}1{@E89a3D|V|Q`z+v{~IyzQ=CHK zR{NEp#j=0tcaVVXfY@1o34^{B;Dlwl@V7|(4@qXKKUDs`#eXRVeu_IN+-koX;A7$c zqr|^S>Q_5A{vuo)3x7$2xI(u-jct32-~WWTUT?qDW)yC<&w$-x;SYURT;CJ^fw(>v z{^uIR^*VkU8}t@`MhyIPy~3^bzxJ^I@m}IT#jew9{3w1{sws^)&Ft$x$&n<{kf7)?H-l-3lu@_!Ool7FOb(uvbFo8 zyxtn8dXS$;=kB8j0fu>1P|2PPyLLI3~& literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o new file mode 100644 index 0000000000000000000000000000000000000000..62416f956e4d876c5bdce6c76a39514725999c2c GIT binary patch literal 22120 zcmeG@3v^UPmao$~cqOwFGbWwRObvKiMKR!u?;f2)V?NoT1tGxAkp&2T|ZGbRGMX1#f?gfN-DuPc# zSPlsHsR$jx2oJ7@deXM_Rq#;J(Bg_F4?fA!{z*e~YG}XZXfJDME)DH1j`pU8R;-~l zbF@7gnpZ>nl%pNc&}ucbqa3YAL-T292GqeILmFBKfc?ksYgCMKir0M8dzJR=dKF4e zx@axvY#4Lgx4UnlRi$D@}Wh*>(*btbQ~>M$qyfi3qwl9SaaaPXRTw2P4hXw~Ae8^Ykud6+4nWy{lMH zJ$pkk#Fuju06fUr>pi_k0LO{2$qk6PxMhZ?ZxAc}gUk?>R+V~?6`INZ&ZF%}wEAO` zRbumhz4`-BZyBrD1Dx+-J?);}F4o@W={>+Ib_4%1Hu)3ce+c+@VFmdIDxggHL1K95 zl_>w8AKwM)<&}R(%nPHCW5sS@T*i8U%SaiUI%E4;V(cKsX!Jr;D1LS{PS!P!K1&)q zb;dDgiLuKvMQk`z?8Gjt*a=>-luh1EUeN|#F@P2Hia@1rAzN1eiZ`HZ3;IKDgW`?7 zCs{fA@>163W7YqN>BE0w^}DXB>-;CnqB3ef&@X)Gjn{3dMgH;8&K>Csw-eGJ0=-=1bL+CF~Rnb?Z z70PE_0K!PK-rY&YQmMICNI+2C2$p;F~6y}n88TxVu7ou zjY&@6lG;8ysNGPtk!Qi};sVeiG1hH5`s%W;jJfV-2dQiWMh#l^ga zYOnVR+}40AR$=N>aWT1}+Uq+6ZX@9Oh_5TT+vkMY(pekH%mD z#{OpjA;0=z8v9#e7;;$o14Cx6>F^-9z($X`d_dhvanrNM(>uW0chE=;F^PEdVPL$O zRqRTp2nB?NtY<&PY3B@uGvtnT2uX-r@C!%_2@X$hGmvp6%V8*-Ov5&W@#OuUy)bxx zL`?c-c$PqzH_f1-{3B1_5qyuNkSS(^d=^a!<5SY2IoZ>CfKBf3^v+>DJ;b1&Giczc z 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..e17df8f20f063ed1705a4737cc3daea55655e7f1 GIT binary patch literal 40192 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o new file mode 100644 index 0000000000000000000000000000000000000000..a83f936c75f78f2231da774fed23572c1d871820 GIT binary patch literal 640 zcmb<-^>JfjWMqH=Mg}_u1P>+(q>%(2z`_m;Y#>3;ypq%$jUY{h{Jd1h08a&%0B3D& zeIQnF&d)8#%t$#upb9=_MBwFzDswm!#^s`-SQjmn0@3bn;vlsk0HZaK*kB1L(TL1JV#D;ogdBhjCKv~a?trpk?gHrpspEi(OF(G=RS7Wk literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o new file mode 100644 index 0000000000000000000000000000000000000000..6889fab7cc310ae6d947dc8debc87dd0e7b5c4cb GIT binary patch literal 144000 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 Mj{Z;AQuTlT3v+;n0ssI2 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o new file mode 100644 index 0000000000000000000000000000000000000000..e79fdb59a7ba5df67b0b6db08d8c4f62624dc399 GIT binary patch literal 349824 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.o new file mode 100644 index 0000000000000000000000000000000000000000..ca8d05d73802fae67ac6f9f8915156c62a6615dd GIT binary patch literal 9192 zcmeHMe{2)i9e)?Q;8K%ISO#pPU^cf+*Uhs-fV65mUw&~B8F&;*)h<1p#0ORr$M{E+ zwy3Z=MOd!8Y(i6~X%iZix@ptsR3rl08fR3Ls%uBPN}a0xK|8h%QBAN(4EpQ#{ocK= z{e0Y&PNn-}+EeWJz0do6f4uMe-t)W5&Yu3>21#PnBz8NiT@lLIwq-RrYKl>|0GMjw zomRDc)kVWF)WbwkrCGhO)9=j>sHM4T(HoQxt!dGV-9eu`v!=1!!ipP%etBlIZ}zQ* za?1v|YLXA_Y|@K6f-P$4b`|=?@_`ex?=}?g^r_QTv&Fa7axS>oXpz*ybFD{fBPFk7 z94}mu#+z#xQjDM^0Me}SN~B_{>hiKl)9fa-_!nifa;LIM*?5OqI8{-<{Z4c_V`?!M z?C2|g;50Y+kY-IJcA@aDcYKjLbV7Z$8l-ftzqI3(%9%#>2x0xDTbt!WFBT_*Y7=A6 zPX=SqEr!uzf3RJD^aXixDdfB-a;hhC{>E`6Ft`h@6yx=h zWv;Z>G*_IRebZa^_Z4QFX5aEE(rfyWvqracPAR^uOMj3je+?G;E%&BVBW?`8d${f`2NnGtw<%E7(*k@t<$4?$fx z%?C@&Wj6Kum?2Q@~`9OED-3+&=_+Tl^i9g<>d`lTn?p3sb zqw=!oW$JN@Q$0!*s7xrwHNJ9-H3urm%}|mXu_PC&&@Y}n>4hkYy&tzE3l|#ljgbo6 z3QMHC->kd;tV-o&EK)gIm%smVz3zb$ffAU4uC89MsnzR1U3@@(49M_TTi*&?S@nu` z%tBS9m-WME4gE+H)1M79T|RIyh`!`QuS);G;+0;MCw~q`uw1RgJ1hU< zx8B0LzU;i263j^6|9a+|>I_I`Q>EY6_O#-$GmBh?A{C>hc^cAUzzur#9_8MFqc!H4 z*VLg`YnQ5Yv3M}(!@8IZHbDog=cffId2mZ&aM@RygW|3LlokF895gpCqvaLY1W{Q& zU}?`@@W3uHv(^U-p%mA_5}cmEwXN=_|Ifcu{#8gJq!)jdApiJ-W8MH({-bbtY5sQs z3i*e+fm~avQbmEyF;Y3RhZhWVF{fJWt5$z!sa-03Xyk7dex^&eN@{7f`sn%m5)o~Y zaDO*mwZ?MiXaBym@K>p`*e;3HBvfdmqTFQ!n;}eSn^M_)Iz5)jC58j3{OE?xY~Z@# zdCUfP$8+(Xk;G^smAiC2xqWkTIJeEzo5;jd+DLLx8yXu;$5X?JjHZuev}87Zi#c9P z!2g=mm&zqZS~uJn7)vFTSYMz!)^*cOUxQDe3sR9BNn`?T;kFf_a3~yTB`E|#Tcj-< zxslS*!UgHU4NRJ7l9u@A`lg`hz5@6XB0+zM47{8umn&-NL_i<0dUYMZb zpVMUKaF{rt>tt_I7+*;8N7y?^9I*EYMF;$bhpn|BNbGljj+dP?M2ut)Yap?%_kf1I zje?y90k8T8qKENCwJCYnH8zB?AlO+T_@(+<01F8_+9fRlAv)ohie@&a%BP55bm8xt zYx%8k4XV>t7r)Is&MBTEs!up|IL7lU7r(o?-!v~&s>h4K$2@G|IPciNRnGQv5I6F} zFpiDt=_!z%^7AI($lt~JRIkst#6Q6KPxF+L{i2KgqnyuRe%PpfZv)vWp5-q1Hz1y7 zG6Ed9G}}Xv5GOmobji;fF8o`dFr4hX?}Go(1-}OJ;$$c3g5LmnapE6$;m_yuz7~4C zo37^9!@U23fFblS$3F-CJT7DRJuV|(y!-ZZ9Ql4OV|SX%cE4Big+M+p36ps($I(8; zi~~R7_le!kzc`M38Hv0#!+K$}$KSzm!lJ z=ikV2j2~53bA=88M={3n!yLEg;h4Y|>+KDWqhItv?QMboc>OC*UIgrviSxz<*l6MgFu4UU9*X3-}FO#xB6+#nAJu-9%_z z2(NG+<$-WIPtiExbPhVn^$4eP(_&0KG{Wf|)M3NvytB=Q)467k4X2~Ww1C&$Ut7D< z`L1|6KA0Ry<{n_7OkyM+N~V%IEuP85A7Gl6#3wRsD4o~zL_C+zB(ea(_=M9K3=JoT z;yHL&onZJBix08G34DwN#jG}{k5^$wP~gVzpU9?$oK+mg>NQtJ+FUhh%$jU2F_B{- z2nHX^tHIT*RUwL(g$A=(o+(rgWpnXNE}u4u@Wh_V<}&#qOaa$Oj-?=fX{N2|U*D

)Lp~V=P6#!j#~Z zTT>ZrbZl72G}w!+UD5H;3@ww`o=;?Ru@yI8mY7Y$#1i1P?NXz{B*5vaOKb__HJ7U| zL*ovuge10UdL}-as4hlreKe~Usw3o#a9Ey9EYkZKKlJ-=o2_*F|pb92pzBuXkiDp6jC5GLiPq-WXnCb#F-MJsZ}pyF-h#^-P$r zZHCP^J~4#aiIuQGSCeh41e2SxiA-!H4(~$lpMbKx66RM6=DTv45z~Cfm9yXBWIwX% zQ+BYb{Zn?ZqV0+~h_pe9tO}`>jJ-b0qN%SV_maUXv+JAJzW)q| zow{=YH@1%-(x2zg5#)m(C+Lzj0Du^OEUMyBE-my`Aya6ozhoc4wHH278;<{c!8XN% z!)IeWmytOZ{6_fL{olo3)X;p%jQtw(>6E|L z7E6QH3G;_0NuTiVLm(K7-TxNu|Ab|x`c3)-d>53R{71R}G!_js^pEe2NT2-sxc@Mc zgcjxx%8G!Yh_Pa$em~c@(AxKQdeE*xrbK!KKV{Vqg-I}*;QA+Q3KTyPe**eW^M9JZ lq&drpIDdRkMfx=VGoa5?L?+E%y!N!S);ofyPubfSqyqfw*L1%C{GC|_FN_ug~Xv%6k3GWp}l zZqIw3^SmGDea}7j>@k0^d7dB;)&z1dDUBFPi2H_;?9)Uau>rGF&i){6k~T`6Qb)U- z`Mw}O{)IltTKlk>-%dtf9LKg;RnatAbX+41pjt$AA@Gj1RM&MFC?s-siI zCgGfv{ZJJ?5eMG{3juNL9a$&@EPhzupwkC-06Hb-g3fx`A|O_95Ta%-*;D)A*P0Ab z|JJ|tpSSG=4$&g8`t!~M>geU-J-dwS-w$N? zE3Ll(BfXwzM=PWxe5j6071dEYQBSyuDjqrJL|@|ZGr})eT;Y9j@D(tEC1v%*eWBG; zD3mQ}Ml0z(5HE%>qogxK@aOCHsUw%cy%pTs$mDJ;qqw3;TP!NisNYOwNjRmB0DV*d zT??7?f$lIS2XKjI7R1GKpKV|bxaSv;a^kDs@|jvrfJ2}zT(t&py>Pn4WZMzAJB+WGab z^ECnMFXiiP7+w8*$*^Qd2Of#^u+cV`o-fSI?0oG36!HbJLT+?bp&(_OF+~Ts6vZG# zow3yRL?WI{D?N_b_Wrhpl;hT(Dq?_}BI$@fs`M+d^z8Y*hc@-~q#(00CFRCORUbpv7m)qrb)H2Bhg4g49dv0T?T1*9D zR~r!q?80)}g32K%bRFQ!843Ciu=v=dYWu!Cj>D>`XAoh+}bEamO2p!^}2$Hwyc z6v*ZLqFJY?Sec6Ox1*t4&=K~Xbn+g7a- z=Q7374vI^V4DA{k9NM{7L-d~|6lZ)kiU%JpZ5xe#itr%;DEj8M~t#em#c|b2$4(B2?gTo`0IdxqoTN z1c&qd&rR@eOz@vL{6;Ec=b-XZ=;;xnA@><@_T6ClWPJ90C>Z$cJ3t1Kkyx~EYq&@0 zhI>U)Nu|P(9RsOYcX+G1b9%PioGYnBBd)YEkR~pe$2*+H4>NLKJQfB+uI@yF=;R)_ z?xEyL#)&HyPb;pL*3MO_bfkM5NhJGXX_XR{-msdC^efW=%nEOMhIyl56IUvoOh>jt z|8PI{;g;Zr1}PZc(A?ba?+ABD4MBgHgzsTg@$+8*|J{R7&3k9J`VAymg$iVm8Z^seDdcBYhMC>nt~-Hw6wSod6*U(1A-%+PKMfxgzVh+x5_=ts6GWT$?v+mAN)=*eL(RJe+UZQ3pqn$K|0%?-g}tK$~6( zXV^JSKbi`?53xzSKk&^51H|yo%Qqh#d~49R^CXb(f(P$kK6v;xT&0h`p$_p*ir=Y9 zO2Y3DwvAvPDPC<<`l+D-Z74yS#NuatKcFZZbC96=QwDwJpTWH#l#BnMO=nEdk1NKH zsbKmn{${|?zZ)LDZK0P#i3dSuakG9Ghw;=G_{$|X!SopPoUWhX?*KS=nCkz;h_q+% oGx%8$%B{bb?w>7`i0j9DA=78;{{k?hZ&Vqg#9BIuahJ>ApJL2uR{#J2 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o new file mode 100644 index 0000000000000000000000000000000000000000..ba362cd79072f16e7d04f83e75f84dd04e59dac8 GIT binary patch literal 322792 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 z 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 z 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 ZD6Ri)H@~&*R%7Nyuiw{{u9jF}?r* literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.o new file mode 100644 index 0000000000000000000000000000000000000000..4494170cb3282363ec508562b7409bfc488e4035 GIT binary patch literal 165536 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..b1706094404cce2b13e4beb5a217efa956736c3d GIT binary patch literal 136112 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.o new file mode 100644 index 0000000000000000000000000000000000000000..38d2d7deb03cefc9c558522fea7d8b8e6d6365d8 GIT binary patch literal 61928 zcmeHw3wRvGm2UNnS_nTR`2omaU<|gg1CnNB12(ZiBg;lIvJtW!o0w!gnuj!aG$ZCA z%L!QwG9d~vaTYd&-E2e>zP)*DZrE&=M?%10VoVaiOS0h2(@EF_$GKTT06#G3p3{A* zyQZewQnix1-~GPyCrzLF>-^`OI#pd=-7`IN%gT;bK22kM)7X{FE^(Bx1^;Es&4$>_ z7J+8lF8%oE=xE!cyt++$vU$g-zU|EBnunfg`<4y=d(FcY;k}&zzufkO4ZqO#xLtU@ z{SjUW?P(dEsXg+lpRu-~r>pi7zAij`VEB*2C&+KR<)B@ADtzm)9lJKOZEJ>3_-gL> z3NUts-yS*^sk!5GAlrUAw3pgq6(4QWUK>3$e4uUD;vMk+P@A@|&GO!%9f0b?AN4Ud zd|>F%yFn6uceT7*YIaw}zP6z~zQb#PcLwDBCIN&|WUF*>0sa^pnt@6{9mJ4IkXR*U8x7m%)!y1%y;__*+nU z%GMfz-!l%aio=<4XjL9=8;4fa;S0v0HRR8Gfy8*Hq&S zB-*Tb=zHR+=k+_Me0=zOM}J&%KGXIOzohLOJXUl5PGd|g+`n{x{sgxM^RUDDZ1~vl z>vq;4 z?R0i%uU@lj*#m7){uW$6Q-Zgr-q7|(+oRu#kX-6dN%Y{^T$5)C)9ZZsuztuxv%97 zgYqU6mmKL$^6~Mwso(st7W#=mDLea92(fSL>f6L&5uEjq}{9{i1 zw}_9%4gOJs54slr81aug@sAQ8jT`)91|M`S{&C`;aN-{$J{mXp#|=K{TKp5lf7^+F zocL(m;GZz~plk8pCjLn${t4ovafAQ1!3SN7f0Fp`IPu>mJ{mXpCk;O6TKsp2|E?4N zB=OO>!GFi#gRaGYm-wSj{C9|t#tr_v1|M`S{;0`cV$sF%_b&0#xWOMqKIoeCEBE<; zJ$&@^U)1azIXOCdWSKO6M@>E&N4k%hx_Q*C-M!BT)g}@J%JG==>F#lq~ zfBUlqJsBRJ62ASdnw?ic1r!#y9KIB!)w^cjVoz)^ZPd2v3}=s3LF3h!LMn06!s)^~ zCv|AB+I+G-HHybX+UWXiq(b zGrXOwBXuzS)jYIsZ&^*d_AE@WZBPD6hc+f#hL*Lk=9<6TXDCBxu>Ga-GYrk$SCSsM zCWG_XZ{SS#QVZl~739a5jB8fDUi0u<_Z@w=4e}Fvwr%(+h_|9`;Zyi0T)^#bOC2=^ ziMFpjwZ|M6ueE6hAY0mA_NxC4?F9P>wCGj;%C4?!yRHb#%LmpJH_wZIAdt!jGTB04 zAev6aFA3xmg+eOR6DVW@!AWc|7tKVH`AAQq5CJ@r$`leg&}5dCD*~Cd#lA!?o6h!Z zH|%9vqM7)%RJ_n@7Q@~7Rk=iG7Pw(VO08y!eUV&up3TdvTM7WVt0iw5ZH6t7%EYp{ zTq0Ho#1a^4Ael?#ZYm}+vF(9*@kyqa6-E`rbdwoiYa(5UuIfo=yQ66nS(QyD4YSZV zLF@{5ty;0Rv<Agjg!PTOQw$L7O5gfLrc)PDi+ z|735nX`nNiO^4d^ss381*~+%FJ7C|!cCsqa2ym$rK=~gazG2m0x4&lKe<}lTCNVbd ze~JEt+`G@hKsj?*}C z8WT?a@6^{${p!?*PW|Q7H%|Q!9O3z|$7QcE7RT;~*`_L+M|+r_k zaDioLJr^&xpzBDoc5*o9QcZyN(B)kGh;CvUyMc>$5H!A?muDc_)>fD;Re)=nNiC#i;qgq%SNgnJ*4o%d2J zS6Z!IcRh*yv_~^s{)mNzM!0;hP30nAwjq_vzl1wHxM^&iDcG-a<9JX!5*WW+j#bD&*3(60#Qc+hsBV@{1e zYRT_ukKVZae+bi9Cl_Z4-l*2v$vNQjW!5sYfs1EbJ^p@+PJ)}24_a2%bCFxYqiO7U zhlexQGBoBC%PFr|lrAp*h9LCaHNs2p+KOBhgB*MA;2zJm3~l0~XlU#yfg2K98zP&l zE!$(B^6n(nFI$u`bH?BL{INyp4plYU>OSM)6F+ zObE2k(i!gR&;|;#gnE;8(JTz~?8R($jcw)}Y&NvgusIu|)+p+8KMpPM)qSc3@^)T> z#!X;r1CXxsb%7T+R}0O+#B7>;y}l7@=hPUCoiW9(Ao zTqzg~17I|zl1=IW88`o|NgGM@EiiI%n$KY8k$s61+i%#I$_%x?N3~0x)O?0og{k%= zs^tW==K$cb90b{j1ROVi-J~HBee;d@sx-sW2wF-BmSl%y$yUD6RyM$2 zqJ^{#`kiAj>{PQUJWUl9zn^M^X1r>w+9<$F3jVc?Skks*s$u>yH*GswuGQ=Xn#IA} z7{s{;8(?$pDK+6#oMt)rG%DN0d(l*_#?PLj2=Btsb_n+5dYXoOn1sv?=1eTlw8}H3 z@{DnnYqibXf*{%ftb$q!;8Mfj8JcmH*DlpCU$){xTX9*5;xbc_uYVX`nrj>9!Mt)- z6THAo$k>%!SPcTcX=-kG@lDRxYTWT!!@8XZvup=~*Gfd%plt+uw(16ns$SlI8cg;^ zaN6~Tv2hmcZrW(j+{>G!dgrondr32GxyiG&4^ST2x!QVd(Ye}n{@O!uf;bOhEo>x5 zJD&d?^71m(I1uoE>H zYduGG-X1GpT=0WuP>WvjP<)W z%*~}IuABG9h6enL<+k@1vW?kTA(71#29?tw#57ThMx^5oVBCt-&#`PKnd%uoOI6>@ zGmi2^G~EcFOGy{wiSfJhOf2=APGyRN-o1OIm&P!-P9cfDL?O2wClC};F~uI7m<5MO z#@`I=Rm=VOX|_*u0*)sJ#!p6{9%#1DzV2dD&7B%U@RaE5&t~112#!ZdpDM}rm&1=T zx~)eXovASdPqCt+BNc+_hn5=r92@VCM!lb*71{0)G{&OQz9bC7@weZpAs);)#*~T< zC=6yP5;d~3|9Jld{40?i{ZDx5rf#4#j_zW6k>KTB<4xUt(Tw+WG&#)GG)!~lHeTKS}=&JsKpde!|Ya%^v> zx-NA*%_tFUKd>Bv%W$O=nj*#a)eD#JYOd56wx>c09w1P2rARS-iAPv6pYAhm4~*~T zzyzo+z8fdxUWx4%fiWkjPcvn?FeevvLvC^PXLE(9!XmLeAXN+Hk))FSJswXVid54# z&XT$4Hsv`>l~dkQrHfE8)k;K1zi<~2?oW*W$d|mU(#vBQP|COHUXAJC87`p|E^A9% zt5IEit0u230#yU0aq#<|nZd2<{qKqF>Yr{@;<`&|Nb`&c(RejAR%~!51SbfkRfBtY zUaXBXLbyxs>5wYVAqA;waGY@}u8PLYrJ_AEO6<~nB38_$3JMoW-dK)#xhd-XT?Zwu zoA*Yr5{bsWUoZn--G*y4Fy`Qo-UCr;pfo@*Ebqp~iVxn7%fUNW*l^Etrx2khb7qV< z7U9q}!cjWzJrf;slTXGXiKK^x1Wh~2{8L3?Tq=9+7YaquNNGHD!xY}>ifui`8>VF! zrhE{4mF{rVfBT&1aBWFR4?H)ms`k3HJzz`JZ&M~Op*ON1$ZoxScwR`Mx z6l!ee2=aw!%)`2q_lF|gjKMf>tNHanDQ$1OFWRVf1o3REGwoIaSNUY1$|-NB+Hoqj zQ;q5DS>f=MT`N$_efOsFaHkzUouEFuU>AF!m&cHb55~Q@S7SPO&U#q_VZ&2O%yQ59 zt?)K=!E4&p*`*P{g^v%*zShBi$i}oQGM|@UB91@LPZnt`$-qZr~cumDvsv z4D_oHdBeF1(ZTOvPq)J7i1=J%cvhp9`|i#Rdbr>~*J?~>&y9s-q?q=Ybqqk+z$xQs z>`7!2@Y$3|0Y09PjusLg?&k5-P-GJ^=^iV5Ba+7f!;_|F!6lO37<}BbF_!djQ{76F z2OAF2WHWK4kA;ZGP`4`C^lvQWV!iMwTc!8z@@f>@SE@gf%taMH`l3uK&#kw$Cibry z)4{Xa4)7i7aB35>-Ky~r0n7gt76!~sZczH(` z$3Eu2X#(%)qK!l-7z~bob`evcNG)%@VL&m5WdSJi9iqs1JhdcLh>m_0V=rlYCaTDG zkDw7+5{W009#SH07vG9mE$tHsK#}hpMKUpg94L{U{CmAV zN@P@+&Yl(1SDOCR#Iv7_rqcOn(&Nfkon4-VWM3%g@#f(C>U0?*D$S;qgXTW3n zm57dh6=N5NA2?TJmq*YGkG*+3@)fBrz7<;_w%-Uqk?#;iCcntra->&@S?)QtIOuWM zsWF{BD<)1%Ji1q;JH+7Wz@}>!45}I{H=Y z(~>;I{tP1mY|v*BCfqF(Gv$ySrRN<=GNZ(F@Z95Zeomt*v^^}JX zf8psyky`E>j11&GP6Dc22k%Lb?_^|Dhz@=|zkQTZVmf0g zaLXt$%RQ@qc1CQxI@>)0#Uwg~p=iP_mPo?mF<_=ciC!KG$iun_}0Gunb z%Okicq4HG}qIWfBxo5S{Zi$}NnB|_~bCupsxk^L_zu9EL^Li_ zy7*RXL0JHb{PHO9dA*40vRw?rlL3b~db4?jX|f~&HLB?w52XP$q6dmYJ5#xW*Q?wC zMXrPQzCq|~k2jzPRLQ0O;fY-1(=3th{$7R0x_D1}q`Sn>)934A z;$E)uF$zxx%HzlsJbXJ1`d1>B`&Iv(uQ&|U*`*QCgKXWgJ}(~$@WytG0KXw9a$|1% z3n`ujib0uwswn7Yxc9GFaSm?6X2%gTJ+6iag@=VrX);US6Hqj%7^{cxb~I z_MA3#1E-8*!gGR@GalZA?T#mE@gSRULMdWzHdUkbFeRKi(PG#hjJw9)G~vOjXyMe6 zD18LgA!9}`N=C+rr{ryG#Z#1Pd=oLM9IuDbq7b+T>y9nRqzbvL_Z5XI-8lxOH&~=3 zP2}AfI)$sh#UjO^Zon}Q+)U|=>FxW$OTWx}0u~h_B*&Jk-fEMYtx7*d40PRB0X!>z>xAJ`iB;O(0a%naro6nhtj=`ytoX(V z?|JTCk?s(K();5j?v-3m`GmU>s?I(mm&9pgV?NZysWZr=I& z%v@yhTN4wBX`&Y0BK6))kSGPRtN-$bDPFgi_g~Y5Z8}Dq-{!dkRj5wBv;A>}k3f`W zM2+j@UH!e5(g@V~j!}3{|Ae#e`4^x5JXbsT{qo(>OdLMf;^FqKH@4XWxO(XBR$2sj zpp^Eu6)%3vbmY>WOfI7Iv?m{X6SZ@ysM3YRpCc$`GcGZuqoJlj5BI376sa0;i9_vH zQ&~r;(OqIF6m#9#h{_>f7KgeCGZq;7<3B?vDO>g%Gg+0-r{ck=#;`s0Q&i+u{8xx;2DQfyz{D!)O4o|Fi-pMLmKAJt!2Qsvm*l8R%mQHfyt$*KBLBG`UX z{YvjuVm~QTY+wD^ZK`*e6e+eZxR=P(emd&BSE%EY$AcXAdKzW4%@>5XZ7hA;hA z|8Y8HlI`!tY`2G2sy(N;0-@~Ouu>HhSc^Dww z#X?r`-mWL2?KhU}Ny6{-DxIg{o7ogew!dz8`w+hXPyGn=#9)m>0L4;pc zhMd3yvoI$mJ*Zy`A8+l8 z^}$*xy&RnNKxBRJ1I+NCOg@6ToXvIWGVxmfS={MPO1=+;DibYSq(5Zuzhc#D}L z{O+^mzyuvEpl%|U!$I5{SkrOs)sdBJ!z~>vTd};UE4(&xZKP{Mq-8^U2S6K4XkBR`m#QoD>i1kZ)|k@F(%$0*6&8c4?8y+ zza$Ocao3lKz(H1w6&kYR{MBh^Hgsxo0D3Ley?ovK)^tFrH<8L@i}`x!=laAToMZCX zn`|N>#>U5HvEFEoMIzy@uJHAdb?xt88CidQ=gLTgW!4u`_&eRXfoPf)A)=lPe5YW( z7apVm{UUT;=(0$GSwd!Qv9GH;- zV37yqv9K?Ygl%$`IcQYfS%plJ4#Sb>q|y7QKDESipFa?xBe zma#C~HP`_EBA<7a1;)~eXpYib5*P31j!w}SqeH(0XUB7^@>$hs;uFI^C$6>6e zvT@d*M?))&U-^bEGTLTzFZ^-_bV?#_=Fdol`P<$s1$w|)TkJ#kR~MtXIPfSGQ-Cl~ zfEPpSeb9y*SuRn)7N^rV3=9*vH=LPcV-3Uu5+M)@DzbJ+QF=kw!az2Y2zRyzT02)< zd~qZE2Uft_a&Z361)73QiyDFr!N3A8HGt3*Y6^xHGT3I~3vAklx|lXttIeKrTGeii zvDtv(Ki^VZxT(5!TXhw?1j@@e2K#zH6~fiELq30{R$T>>f36R7aa#=kX+tt!4sp4q zx;9*07p@Kr`S0@izKLRO3z7qd2FCCJ*ME(UlGbz3o?pWUjgmq z+vQxKeJkwe3iWsBQ~`0fRM)js2U@BZgsX!?m7maeRovzOq|cwzs}~qJ)M8T%0{Te{ zcFq=LRKWUA2-q_S3fn(|-wO6=Kr~HzyLu|_P#yj?I32OZVm`;;dToTCJda$qxZe0_ zG(7naMN@>&|F(usUGptE!>2*;qW(Rark^#b>Os&i z=(8$A`qav0mA(3Tz6;LK1OE5=E&y|%*OyjZq@P#03@ZKGt9I*4{WY%}<PH~&oMzYEXw8Gkyf^nd+ts$SPWu2uR+wPi-+dZq6@ zXZR|lU_a&4^twq^U(n}QeMrBk>X?3>e@fL$`bCvV{qm%)S6&Hi49?Ui`3FDen=5hu z4Y+eLF-t0|rt8ZKy1q%D1Cn03yeuh?f$kL4)hnx(mDN58wP#MMxd-H*tSabQWlx#Pe;6u|$Zz#l4d|Cu9n>%Xd;PK-bp0#(6~3l3 zeDh}LdR4!E#ajLB??ZAL^mnxrWu^_7+W*}i3(KF=TD1lUV@U1cAp^yJM|ujqCD zo&MGOoXWfP&5e59Dhc0Q`7?d)HJ~)upl=pL|73`C4ptNz^f{a>X(a!uVJ8nVcItdg zgCV-P64a)br_HSUus(OWKF2>9y23wLb(^JzwR7OOgbtkJuUUq*`}H}?FV*Kips(zB z9uCsMP5K%BDGmCXkbaJTD;CazLQ2>D-@N5>`W61EFX=Tfu-@xiegdXzBH-VR4&)2 z;Q@z(vbwTKf6x7TedXtX;IDxe)cXelIO6WU**MJnNBvcwD;xYLOxHg+rR#@H*Wc1p zo5=MPIM!i~c<*%6AfNu6_dkc}v4Z_^)T!2wQ>wJ>!HJ!nZJ|>viGemh3E5x=n9zhX z_FAf%Z{X)zinW%6c1{yYw&-W4+XX@Lv&llq6wiR2#?G_wI!i+PQ-zW(`dN)#5F|gF zCX`HZwULJlEqsS{nnC+BEL;@))~d!vF9x2*&bNWMDK;4P12(?j6lWOtoHG1lhMfy+ ze9-O-KReUL1-Q+A1{2}`XG!SC;L|#`u6d{TmEqa zw~rUTer*Fg(}m-OuUr4yh=;H08RP5Ke*`;DerpXo_PFKi(yaz=k6XST7bp{NXA`+WW@2G zZ+DY`m_55Pw#Nnkv4CUzydQrn;X_n@gZ6U#Q=wmQll{(j!Pf}57=PXczt07K!Ug{? z7ko1GJC9TJ8*;%ny5Jvi!S8p$_qyP}alth@q%lV9mwSz<8LO6X-Y@46F82%3@WKbq z&x~~vfHH0z|EXDI=GB~yA0nKepSk`kg!5yLuY~fWD=VA$;LiiF1uO*xxr`-NN!kZ=i zI>K8ed^X{25*{GDL&EtrJMT~K*Judnu9x&LAv>ESJV^Kr626%5EfT(j@VJCufdRnQ zYwoOkHj{o@!dnUNm+&^i3liQz_@IP$5`MFUuP1zmgl{5zr-a`?_{SuC3*n!Ta9k(h zw%goU?d>J~dn7zf_-7=%pYYF0c!BWyC47+Z2PFJv!oMWpc>c!ipUs^W=T5>Ol<n!doSLHsNg&9w59!!sim+ zDd7tUUoYWR6=s~9Bs@s^H%Rzm!na8H62jvWzKrl*32!DmE#a+%_e(gg`*ABscn9Hw z65dJp%@V$j+FNUyGp-=T_52-#^Yzs`ROa(G$FC;4pQn0xef79xhtDtHchTq96Y@Hr zU!kD=ONfg*@%jSm_~vGZulX^4QJ-I_$$q(xtUn(60UiwOr;{w(pGP>_50H$z6M zn`GP#kc>Fm;@d6~5ErldYpH(_7q9xyq}vvV+gF#2T_xb6{`G`oK0@%%H@Cd;n9)AZ zA#%3h3v7r7P@ru$?Gfi(gnlaEVtd~baIw9r@rc)n0kVm^`$@)l#5`0Hj%lSs%Ru;b zE8=u$8Tc%kM`ir;q$K0>DbF(gRTuo+O2Z99eI6SkgD&_xE_jeGo@F~R7yQ!#KE({d zc>SphK97P!`}SQ9#JPZ!Uva@-cfs$V z0Vmt9qNK?9zX&+qJLTIHN($f`8Tp|CI|)!=GVyUVs78#>X(?b2$imGGpi?-a&OdHm<+u z!)66PzaT!3baBV$D6W4K>A#0`5WkRQ-0|}o=All&xqoiwUb3@}bU6N5!n+CQcIv6T zQ^HqK`STJ!L}h*+=XUu07Ct|7oS)xMNOs<#avdtd#`XF7VGiLu{s$@kdO`mzlWM%K zlJs9D{p%$B2ZZx=9k>4-!XuLYA;Px`e(@Z@w~tEtuaW-W3i^BuAm?k6KD*hp^r)bJ z4mS?_7bX25>EnHA+<5%+2 zU|_U`CH?KBzedoX&6Q!Flk~qx`uzSOkLNzZcS`zq5`L$If0gii1;66@;SovyNz#8> z(C5c2hWnhP|1#arc3xy!o~FixiSo0B4DUMAo;kJbH+S-FC6>_@cE*F$Rryuws9UN=j2ddP25z|rr0M7mMH(eFa?TNH5A zKabWo+XWo;FD3n*0*?A$B>j&GIO;c({@ntO`t9(K+r0vg`m;&@3j&V%)2RGU0*?9@ zkp90Ct^rno|0uxrxP&jH@_qpq*J&>i&d14zDWAU*aEzy)PF%kcaExao#q+v=qy8DB z|CWHG{#w$9&$SpE`bGUWNxxFSQ9nld(*+#$7tlKIOaVvz8%h5H0Z0AKq(5K4QU4~= zUre|L80P02@Q>S768>`&X6*vbuf?!xBjG%spQL;yB>Wn}bAlay?SOW6Nc#Va^zV{z zZs#8aJA5sHcK%h+$2{Ccd3a31e?<5`!456u&?jk%d;r9`~ zL&6^*e3yj(3*q+(IL4E~0ARz<{o%&rnR<&^{<46h{ufC9YXXjO){y?A0*?B>BmM6P zIO^At{<8v(`nS-*@tlC8{#?@kPXR}LMhC&q1RVA2N&m2fUq<+w5`HD&8qH5U4=V_- zAzTC7IBt1=%$M|M(zsnD;e32vCE=~4e~pCmZB+GZKCg;YGqRe(}0* zNYeiu>3>qdG0zn=N!%^qm}lOu5dla2)ujJL0Z09I%IDVw9QE%e{eKm3)bAqwCj=bz z_mTcy0Z0A!ll}_=j`~aJI`fADj`}>$zYuWL|1yoMUkf(3SR(ax=8r%}-7*NjljmJ9kA52JaYUBJ=K zI=W6?BjBjd`}cYQNBxhI{s#mc^?CoM1RV8WApJf8M}6ME+XWo;eROj8h=8Mhj`A}s z;HZBM>F*M7)aU(spMazOk4gU@1swHxe|?Q`4KU0n&;R3sKH9m5>^v{vXy+v5`DF?J zE#a?7_@4*|s6th{{0$ zr&E`KERpb4RBjeo&rmr)`#RW*{o5?yVn6cuQNN0GaQ7vW5f}SqzkrMR ze^tQ6JXhgBfDP@4`Q-24Aui^PzfXj?n4jH(9Wf7I1U=laT5RtR4b;TN_U<4%xD(s^ zn1GAzeO184_EwTJtQOn5NWjJRzE8l#_8z3*(2m&Nb+mp!Tx>6Eh$p&>J&|a4cP=pi zC3v2)fj`m2ABf`5t~C_kX+74EOQfTQXer`jSzMVl;CDL1Q%X*X#zR5IlV9fJR}Qvp z6=poo%fr(^Cc%suo-pf4}bt#F$f=WY#HS@mV#8q?A4P)<6v^d2F#E1J9*4T)lP! zJVhIgZDsxN#A+ewpXzCVj)vbXV-4U1_mQhRu5Af-;FGiKR<4h%$LDV& zVAvcmu{=EYX*{E6KkV5g)-JM3rH_DyEG=*tY7pNXgk#X__BtH*bnBwT#3R2ni(92i zJl@5v9tw!j^3JMiwxm))oa?X#KTmloeyWsSG8bdjJwQgA%~%k(Z<~cd!kS=@P2qDY z&fmD<`NGNngGR0Jyd9Orxe=kg@bBb*ko<3=c@_QRlqviFEnw)M)Ic(~LzMR&SSf6B z{(c2@PW}&khe&j?K>xVplKp=O>^rr83(fC`$PC}f?Jok^(f>Y^v73nKA48G-M*(y4 z-%JCFudB#RS^wVv6;A%Q(1N3li0B{BkFx(IfI0c!P5u`WpYP=MFM{Np8v?7syDo|FID(@c+i9qHzOIq;qQSM4_$ zV*By4<+6XgUylB#a|g8FLjD61&dYp%7|2fX?;t*3*K#v*{_uSrr}&pp{0E7M{WlZ- z<@hJL<&PFue4Xs(Uw6r0?XxChHxbc4uCrwS2^arCx-O<+KvqiEvIuT*@qa)0-$G3E zk8`H%{}IYRm?_zgk$-XRi3+mb4b=Z=U)(C_dU-Q;uCVbU-?tK9w!4Kodab}kQSSdb zm+|)?Da!i1%=Z{3#sX$awmqc4&ojJ|^LQEG-@}~B{6kzZ&NaLCGQ&is;-n*NvhMT1cRK#r_e|0r z>KGiKbKzee|7cIPiOfD!hV6G!rBq}o0Avh#8|ULI+>hoC&0?8u9LP@b?|IH7ETM#9 z{1?GLH^;~2zX9gtKiXjOA2fH?tE`LlPX3Sm%%mJ50{X{usqEhm^{5gw)vecQji&fv zy5GesxPQLK&to|8Kk>g!Mwk<6&v|_R90*(%Ri7iih@mX&;``Wu^-IH)9U%UfBm!?g zxBG<4_&fLuQ{y#K#Qb5Ga6a$92TcE@W$y;5<33O8I9?-#!$w^E?>}TRME}@Fvi}pn WhrhBd@Q?`|!odL>`o$qF^Zzg4Md0QD literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_main.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_main.o new file mode 100644 index 0000000000000000000000000000000000000000..2991eb6170f5b12cb91b26f2d8401b8d951c7080 GIT binary patch literal 726656 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­XS+DZXNNe)XQw#F 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®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 Lus!RPVg3IBftZT& literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.o new file mode 100644 index 0000000000000000000000000000000000000000..2b50302199dbb44b7e81a3f0de8e8d77c2cce15f GIT binary patch literal 47800 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

}H(#M(y6c<=1N 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 CstQ&B literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.o new file mode 100644 index 0000000000000000000000000000000000000000..1505b6dbf8d50c6c7974f93b187b98fb524b2278 GIT binary patch literal 143696 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 z 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%0Dq0V82%plRq*}f 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⪚`O0VaqARZ{ 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.o new file mode 100644 index 0000000000000000000000000000000000000000..ccc6b7a771964e7c2376b93a40745ee5f71080a9 GIT binary patch literal 58392 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 z z^&x(7qM{<6szHe|p6YDS)==?O*R#-2@l*%HUN|J|7VUi<@KC7WnlEWhsyK)aw$9LP zC8cSgG!hrJVcSFj zT(6lSMaH_|D#34fWxNY{c0*dzdI7rIH`(6FF*vC5BI07?wnHd~^Mj+DDX%%F{X)ua zXD*O1%NTlgK$Hhg809%`ACqB!*C2HF49ZaG9UODO)u!a=XKt9128D0geEG|n3s9%K z22%fN1Jg>-8Lr?QSB$yrR;PT{?mwCs@GsB)NcoU!y$`=NqJx%j@jRBVvJfI64H0_6 zF@4eX9sY)6ofH_2&BTw@D2PJQ-ihJW*}5i&Dkzp4B2ra{`ryfP$v|Pt*hr^e!#oMW z6MPS^G)MwJ#r#R&g*Sa>zb2P=H63t0d0Ay5 z{Xy3tul#3bTb!58s&QFfs+qNMsKlj1C9WJQQ3_oHn@<6jK`^xqRlH@W#5yEmTs^=W zXE}*3n4CcCUkdgkkl`Gpgpv;yjqHQ@c9FD5(VQ3#%plKzBdB3qTnaGCcYwP5cwk5@ zRy)V|{9ME!MU;*y5&c?w^)6u69$CW zwW?Pic!=62!s(o-ZP;rV?BxC}qGxmKwhWDV(4wwvXVf{$#jqsaey9>)p4039C#XML znwHa8vDFhYjh-wWya5VKq1>$|c5cgAb zuonA(h_bZAaC_(G?+V(~P$`rp!>5>ceNc{LRU93iW-Y^<8cf5qXQ;j4yikrgd%4j^ zgduh~RclhX)b&ZGQ`(MT=MRw4cf7zc)r1R$>EVNF314RKS?-O$=)EOjAfdU``w>I$7&1y zQ<_Er7iT6TcsJ}Y0<$8%TM8(S74@PHbX6M0Wi-{f-TrXFt%!k&KP`lnc%Pbx`Q>0h zyz*o9?2@L!9()0uFeezYz20D`(uUm^)^_5LW<5h`&=J-Q@vFNj6tT!7C=T>ilOQFJ z$TRz`L1DTs&BX37IzSdFH~YegLLB$Qi1GA8UAA5k+p4;H$wf5cf$%VdkZ0{z@shp6WCZ;Bi2JL= zyGWz3y^M#!Cu+qj477vgKN~h9HsjisZyDkzg=ALL;;!gh^2M-(p1!sk(GSrAXETBI zTJZ)$yuq?j7^v6QUxbweW_LYVc#&yr1n)!0E>Mj;d$A0iNtC7!jB0(0rWWj`AdaYl zfKHo{BSqri32t@8!K2z}Oi_ji7R%*+NOK7?v#A**ucfFbjNcyoW_|~#UGiH{ctJ4W zR7eitIRt)*VMHDcPvDVYRM=x)Cks0hw^qEai$8Gs^7zLmoDWDkOWF;$!rmJe`$E)t z4NHsYsvvXkhu!af3QZt>+o~8+SG<-iyv{HZ5)Q&$Nd)60PQj%95JtdFrZmq<0igg0Q&gv*SkPVUu|j0VF_O$_!* zV_enPFVHFy;fFgfFblK#chHteb+gpfQ-;->wzDa;iiMHWLz+?JKfx1BXlk5u!I%d7 zINFPedK4~R>yvJmU~IHekY9k*ZAGj`d;m(on17-s_NE%22FfW<)rvnsBr-S=dYUaeq&5xm}!z5xmye)`eFJxJDnNTx`$H=>>f~*(x8-sW_lEKF9$)Jo z+TSjx^=)JqY;VJW>ZZ%2sOZ%qxPP!6i`L}L)xQ3=N#4zqhQmg+VMKOB{bKxjY0=~u z*CO^PcfyQQVeqsFDXH4{n@uWsd|Ct5fC=Dl2?-B>jBuh!Z(}eyaTw2OV2Fy$>(`8( zCpGqI=u9vOg<)_rxjs1vBHyDkY!id6NrRgP6FgQY^v<@gJ%T*)7NHi%5v;dbbHY(M zhC9ir5XcIu4za%!Rk+M;yg=yJ5nvx>4Rae^+aE#ZSZ-WV$x52DLg*a_Df;N6&(+`lW0EBa70K&}Uz{}8g z0i6T~KkZ#W-yH&)TL6vwCLp;%ZJ&3u%~XGZ`+&Yl(9UGf8tOhEb9jznDv)lfL;05i zefWJq51`NNpApZ>8b)cW+RjON+Pi-c&kC-`xUq=0208Jp2Hz)?{bk;*KqkchI1pm% z;+X^H2Y;qsx{Q0V7C%QO#JS1B#cO*dV{v#h9FM_t&JKx}r2#8!vCUd>JfCgKc_>+3 z>|-=A{U`pg>N>mX*+$haSpX9X02ocktJ1Jr_A+WV1uRRB%B(THj2tin;FVyHwkaYk zUPVoW6vaa#D{B}yFXMAyVgW~x(P_It=~b-}%pi5X2ct1?B?Fg`+qVcz?yR{sw741o zQicI7-E)5=dl|$r*o3b}3Sh+=wqG@Dyb=kGHWEHBnY?9#a0DY6G}f*%!{FYug%z^k z;QNoN-5|Zr)dXEPVB%_kMImzt{bLR1eS{jG0s8C;fW2C=C-XJalJ*AbaYBr_?tOB> z5EjoGgJ`2Agj+r2+67*p%WO64TJ{m@sue>(V-j%ovz&-vXEIz^R?XXg;eJ6ph8C)N zc|Vhkh8I-A0bL4$EQo~_6qmW}Pozwzp3L2nROJje;*ecnn&L3!WrEfG%0c>NtvCe+ z>(BfH+LbYFsT9PdCWPB@v2u{iC=o)w!%AZ6z{o*BgJAlGj%VnvQXD{f_KV`MlwUr) zAl+wCn`GM*CQuq6L3s0P$`(iYRUgX1beIwN!xb^4EMRn771lo;&$hWQTk2RBaRH8D ziz{BM4w!5p6;)aWyU?j2ErZz9$CXr|3EWC$o5Z+XYfsp`h_AG(6`Ll(Ga2~8$|=XF zSc_BHHZPGia1o^tDuXtC)@eBGzMm!RzMn-FliAOPEwBW%>PEop;x)26oihkk`{WSD zq#1=owvT!>;HAGIdw%jz|k?@!>Eth3n!P+{d#Ejdo*m6=ncDQbwOR-$e}l!GMt%q zg&MMkDF7D{gKTwpNx`FFy?Ipn6#T{mj0%s-hxO9KP~Li38aazX@Q3Q5!DjOf$%zr? zh9Sf%rx}HQ3oy{Yxd4)A_T%-7Lpj6;fuhCM!dK0NESJ0=b!pKPSKRvsbq~*`z5jYF z6^|PJZnUn;Jz2ly50Hq`iXqSWz_H=F=nBM-MnfBmNlNq5{7!jYIUXM@zD zn{?N7vr4&s*$b@k9(0jwng?Q!2LdC_S#US-crcMY&=x%~LwHa-oDDqm)1Y%zzJF{n za$E6l*Wsi5hdaa*3popnZQ}2sCWc+IA*LzK+Ac;IA+FYD$dl53?J2%qokKEW>Xh3Rg0lEp{9F`AUowqZboPt9L=}>gf2i%emL&Ax^jeY8M$W^|>fp$~+fjhm0 z`R|2=jz1ToBmB)bkKA7}Z+pjqQ@c0qz5nxXY=n=@jWz@2iWbtc9wMtMMZk+|0%3kjuWncxnmaPzHB>$6vL*dB1`F z(ypPfzXDjCl$=n?K(G)oK7~boqzndY3`ERJVUcnuLdDA3ewJMsO#GBBBocD@Dt*zY zxAnL+tk24Oz)|tF@Qw+J-!XGAabH>RvaeL+jpA{2VbB>xHTDukWq~6VryaikLYF_n z@crKyzt_;+4Ao*plA>gg9bdnAQgTeGys&i02)$1-8;*M7uc;U%enjC=JU9MHYKK+3 z?wOFUKan0}QNWggRR)}@B=kA0ThEltPy{#O->$i4o1;s45H2OdVERpX&7OUH9k=g{laE;{cFGc*dwdV{P3@yhpxi{LwtFm!_C6gKQEI)Z7>%I+taQR{B zDJ?nXDln@L^k`>M`IbESKgrt>f*qJ1-skjOTCdvHydOH)2Q|t@ExOUG<+gIcpi3OC zScSle8wyQGo34r;AJ*iL9*5zb_ecfBiyDN5MEF@e?$DxJAsdCCFB*`X!;xT_x?46I zM5JF4e5NS#A49{s_|Jjwlmpur2-`To)_nB<0RB9PWoGu+%Q&xJ})B*#?Qm`ve( zRkC7OC{b}#7Zsh@vj|mfY(7Br1(h^b(LC${I&;*T%A@_mnm!J%vF6W3_a2Eo!EsGHAVTl5*oy+xsf zswX}kO56a)AEg$qx1YeJD!3#TPx zWw+yK7X?#C2F90-7BXKS0+}a=MkddA1DQmL8hr!Gem*9FK_YVy7Lh&kd*sF%2c5BW z+dboH7;z7t;blE&@X%ggu&OsGPN~ty;ngEjA93JNB6B|rplLSw%-|+ZLoa9HJQA9$ z6(1PA{1JP3nr6eoHP(_|*wb&I1krc8e?#b-xIN=p#F{{Lb~rmnzNSgpg;JN&NuBeX zpng4$(9e6f!n&h3 zY%|r&HUMs`na{b^OzyvO+ga%yTFva!hxf8D$hk;2w9GKI%!(g|)?3&J7hnpST4vbN zGB0!6hyF}`lUAxCDxHJ%Oduc1aoKbqUs-koaJrX$LV2T@;Z(W_t60hd8O>!~`WfL7wl1Q~780 z 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
TuLBW0r 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

xW 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.o b/fhi_lib/lib/build-oru/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.o new file mode 100644 index 0000000000000000000000000000000000000000..7d39d5dcafbb6228c9bd3dbc21900d90ed6498c0 GIT binary patch literal 76800 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 ACIA2c literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build-oru/obj/libxran-oru.dep b/fhi_lib/lib/build-oru/obj/libxran-oru.dep new file mode 100644 index 0000000..ad20fce --- /dev/null +++ b/fhi_lib/lib/build-oru/obj/libxran-oru.dep @@ -0,0 +1,1888 @@ +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.o: \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pci/rte_pci.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o: \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pci/rte_pci.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_up_api.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_up_api.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_sync_api.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_sync_api.c \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_sync_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_timer.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_timer.c \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_transport.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_ul_tables.c \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.c \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_version.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_sync_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_sync_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_main.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_sync_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_main.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_main.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_main.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_main.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_version.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_ru.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_main.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mem_mgr.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_malloc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_tx_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_rx_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_sync_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_frame_struct.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_ecpri_owd_measurements.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_delay_measurement.c \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_cman.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_interrupts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_epoll.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_dev.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_devargs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_errno.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_power_intrinsics.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_dev_info.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_eth_ctrl.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_flow.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_icmp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ip.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_sctp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_tcp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_udp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_vxlan.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_esp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_higig.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ecpri.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_dyn.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/meter/rte_meter.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gtp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_l2tpv2.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ppp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_gre.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_macsec.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ethdev/rte_ethdev_core.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/timer/rte_timer.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_up.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_cp_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_pkt_cp.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_transport.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_dev.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_prach_cfg.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_up_api.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/pdump/rte_pdump.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/rte_bpf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/bpf/bpf_def.h \ + /home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_lib_mlog_tasks_id.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_ecpri_owd_measurements.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_printf.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_mlog_lnx.h \ + /home/ashwini/v23.03/flexran_l1_sw/libs/mlog/source/mlog_lnx.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_compression.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_ref.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_ref.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_mod_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_compression_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_compression_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.h \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_fh_o_du.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/net/rte_ether.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_random.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_compat.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_common.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/config/rte_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/build/rte_build_config.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/linux/include/rte_os.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_spinlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_per_lcore.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_eal.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_uuid.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_pci_dev_feature_defs.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_launch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_thread.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_pause.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_atomic.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_atomic_64.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rtm.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cpuflags.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_branch_prediction.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_cycles.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_debug.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_log.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memory.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_bitops.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_fbarray.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_rwlock.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_memzone.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_generic_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_hts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_rts_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_elem_pvt.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/ring/rte_ring_peek_zc.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_memcpy.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_vect.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mempool/rte_mempool_trace_fp.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_trace_point.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/rte_string_fns.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_prefetch.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_ptype.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/mbuf/rte_mbuf_core.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/include/generic/rte_byteorder.h \ + /home/ashwini/v23.03/wireless_dpdk_ae/lib/eal/x86/include/rte_byteorder_64.h +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane32_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.cpp \ + /home/ashwini/v23.03/flexran_xran/lib/api/xran_compression.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_utils.hpp \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_byte_packing_utils.hpp +build-oru/obj//home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o: \ + /home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.cpp diff --git a/fhi_lib/lib/build/libxran.a b/fhi_lib/lib/build/libxran.a new file mode 100644 index 0000000000000000000000000000000000000000..97943872afdc038d8959a4a4196e218749dedd2f GIT binary patch literal 4578610 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 z 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%0A|jVbRQ9POJsGW1U3L*S}p|86vl_V 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�Sx-g+U%T#q}B`!A+WJVk;}XSq9L;*;zff*A+l0Yi}VO5K`bL@ibhdG zB4^cUM9^*Da0!ZztPvNQ+pNf~+(=$0+-6KCp|(*>e>*lg2;lCzBP@U`spQT&t>m+_ z1;C-^=bAL&t|K+z^Yb*|3kx*hi!B=P>} zi`pyQJ-3c-mc3^ikyfPX6Zr*OWFYbkE1X;PGtrTp{<&!c&vWZuZH5RZjMZ%9O3{)@ zltr$>@Cv@$t@S~z)_X-QCiOnqUIyMTPte&yE|W)Fymr3A4D%X|fe)BrtfUR=mmtoD zH_r&ZC>hxsOy@61OBZOhxO@LW>UR3rYqYoqiy8_CBo*Ggddakx2p`5OTq?aA11Cs_ z#=tV^&=^=Q9U22C+D+Vv44h<(P?~|0?G{yXn!Q{Br`v4`XtP%;pxqY18x!cTMexQz zr@cj0>#|1`&~0ZFu)>~Hz!~;V1+26$RX~sZK?R&?U#Ebx?2j{0kBQx0ZQsJN0RwC7 zc_u?F&szHy4eG^4v?^O?->X6W_5&I;VDA zYed}hu*f!x$g(U!15pxv4l^QO(Zt3c=?8O>0IprZBN4frnV6E>=#RknREdQ6U|({f?B5f$vHg7ATy>%Aohvw0$Kh>?&syR7^SP5>r`&fNEq47@hDrVPW5O63VMF!X5CzqbFC$W1 zma^;W3k5^s6?fOR)+IMZ-15w~(Hg04p@NpZDZ7cA5w$-44-?y#( zHSh@=Yfn}ANw4%ju-y)0Mf{M(btvszi5&?D2d`2;N4O=f(j?u|-6*cdn-`9^>kk*3 zpck-=d7=r3M-AYgNe-uge0I`y{Zg$D zmzm^?R39uyALxB{Qc0hkT+(N!h(2?k0(r4SslS1nN5i}RC> zey2#|3)jC*7~fIIsZXG>;rh)&R#xS?W_ZRTAuGe@nc;x8D_b8m!-v#sC=p;XrYy(ChSMH*2PcRjz(&Uq4rQny!$LLT#1%i+Vo zhvZ6%fon{$+04MTc)k`_3#k7XzRrXz#UsndoLU@|pVkKDO_J)FD6YSg2jypkk{J7D zq9z)_@GV45w1MGUO|9~6c$7DwiE_JX1`IKUbLBfsa?*FXf;jcx6oP!4c;o#b$2;{8 z3UWMvzh#nhRmSuXjN?EJei*RsAiizVf=$(bq{O&(vvINhS)4~vzo@3~;4x!6sNnAc zHiDw1!>2($yh;S}J+7(lds205ecz{(9_Mn@B2rh-X~(9QNK?#Tiz$) zk^}WiItN+eo+|aceXzW-^GC3@53$7M`uDa0IMl)d!+MSKX~TJjkZgCr{)K3FoGLvl z+s(i)18v;p3_KUu$v~Q_{VMRlq2Ok`oq*>9a>2?AsTTtBo+(4W4m^Z=Oe`}o#hQgT zJY|{!3>F6YR}m@7H>JvK`|m=qJE+#HQZNSoAzvcEz-#*R* zUJqMMT#a5qfG42lu{s}U2T*HGnkU^zscBY|y)cYFT=Q!k$eJ!K=UD<~z+!~5ZVA}m z(v$_AD;XY^%3@`ITdIUEUfYiZL|a*)N97qV1K$lC$OIU8EFfCMz~g~~Rmt}P;vx~3 zd_SOF+j}A)uI+KdpA3k$=1J%u2C%WTlTv>O6gzuo!2YU`|0XKAU&{Y^0=^d5saa5) zW;^a22N1Iu=+Jfl_lDXKVcptAHgM~E^W_(w|CWU}=~No!(%bBuPj zP(LpqE{d~%I2L!q9eVnr-&`P+Cre1>x+u=rIUAmzGws=@7ndNjF^I(EKf8l7iRWzK8xB!%{*14B z!ggM#)cuslU$tET$$>calzNg1`0EG)iHft3QWWbr%aA(7;baG8o`Ek`WnDw-bPkE4 z$Z1$K-GoYt5z#y+t?IozL)Cj_2I@JN6Qy1Firj!N`W$$qilLwyDs#R-weGxwxK9azT6IbGi*H-0{G12{2 z-KFP%hDI7C@23*GZs$&nk7D<{O?A&T-tM`Ex<~caHPjy(NR^fDuk&`^_1@0=u($I* zLY=2N>b6kp_M8 zdDSN+1DLv88^E4YAl_N*X4RLUM3=~+_NccnAN3Bk$GpAuxVN{yr^fwviHsQRZ;~t- zhfmWu#DF=MdW=5*KS}lqX>kosccre$;Er6US*!wU!9c{z(FiBB+*}DAm}?|J&eBcO z^k_JL#MfFXrO$WpPj=I0lN4N}8rp19N9izi&7Q;On%?^7vS8~1yIP2GNEG)`nm(bZ zNunxv3s>)-%N@#9__v5cVITSRZaDH1iQDQXPIVJKZeqQgh`EVz zB-*G!|K%ojAmOoAiu^*KB5UoP+FHG{;*A)f#i98;@LdmD(npV$^wFawedHJZj!CYe zI5fXgVuO!y7bvy=*qnYkwf!yC?wMhVQNdFd>{M%bvEb_%lf`(KyqUS-!HZ?@eBVtx z<0gLNCSG?M?vQ)(c*UgG~=H)-*y2F4q#BnAJ|bg=QG;D4Ea z`H((R%>Zp7D8mi}$iFJsDuL}1I9LLQ0<=g~_~8J_r{G9{{H=ng1-`pfhmFAP*as2= zsfKBZbS>j;qzLv^O7 zU)OOMxE@Z}+us8m;83=Psk-D_AT8~FjJYWlj|Kh?73;8fiW%dk=;dVBZzExiP^v_q z=@K}@u+Yi2068g<&IagZJQYQKA1X;vGkEczE?UO+iuTqpiK==p%k&hSD}nP2cbdh1 z+4F|py+2@+QZB$xbr#^UGNu3Updx2WwaX*-n zAFuId$wib^_p=%p8TW-iE6PU8Fj`Q_ag!^j`O#X?WNRf8CSw$JPP2)p5oJC%3A=5)iD>XvK;un>CYfxuB$Lg2gLDfwyzxBV zz17p2o$s&Q{7HO^Oxfj0LE@s|lY?HnJvm5Hs`68UBx$j8LZ<~uv<(|bt@wmi27{+l zVh9pd!u}hzItQUns5cly z9DED12h8Y~_)qTx{O7#K_|Mr-<4^w!_;NqYxZ4f@??tZC`zn|A+eO>KE*uf>W8%}1 zUGy*eBY$wGc@Xl>HP1VmF*=o*(<0;&a+5{FH{vc|8t~G~GzYoAL(RdWO~|yg#9rr& zPSh4w(d#HH>gDr)X4}}$`6Aut5GA?z*~FbIutS@;X9d4=f=RT*O_Qr;?9jQ4Akv$I zw^Q`tq)?NBH>1hfAa+E_l{*{djwl10w8J^)ZE|~*OE#P80L3{^UKQe!sC-(2xH~vn z3=4iFMu0JUz*#-5e+?CUkS)@=b2jL?zLj+qL=Z4lR9a z;N|6R^Y7H=IX(SZt-hYVjbj?@ae^bOsMgtEQ_(D4MfJLh8gvyMpsT1+SJ7;#BG%V| z+Url8gG_!Nh7UZQL!|P!+M#BRRMDsTikwu@r`b7(9{;p;Efzs;TJ`>|j3Cr?imWAVBqX$?mukUPOa8Ryvdyzu#w})Kmj-xVBk>fYB_W$Aufo!&*z9K z-DV#t`m0d@q9+^w$}^fQ`D^ezP=VLMcRf9zDSF%1m1k>1$+iwaFd&pCDv2Jh(S}B? zmJVrYM@xsbw2mwCWhd-s9deRu5_Q&Aj7dY5thcVf6(h)fFr;A%sdJh%-YO(v34PA1^2uy3BJ^<;clv zy3AYuD(X^H61tqQGDY{Zosn_=AC>L2o#VB3HtX$dk?myutr!V{|4Tammo)x=wk`%$ z(U*VL`r~D*_7qp`uSovya`}gyQ#Jml>HJUE`L{_ulV@?-;najMm+Qh@t_gFw71`nn zBPt1He876FD9nFLVd_wmJ3Zj6(u7&93$q5dSlAOZUg7Wq0@C2G&|-=!w3y<*IbSV} z{!(8ITCOPx8Lue`8LtT*J*J0**9WQ5Dnz`F@fG|LE$H|#r#H+&%t4>fBf&#Xr^Ete zaAG+UZIsiC#K>lRZTO{JC4{yHmvWsyB7^HVRA+yD^&dy0T7I_RZ{r3h!gZHX!DyFO z%wge12a)H7*MLf&&=;f_Ax!j)HVcV1Dw^*mmLW0H=|XGW#M|7&h?~f{iA#`B!hbQa zWFWAsj%1J7ukBR}f{?3`TA--^Ind}*XR%2$oY)KP9EwSqKB2El?Hq>;*3Jn?v{BI- zH*pRUBf~C~brTo6iT5L+r2U$8Qkk^X_hb1A^$}}M$qLojZ~^94`h*^mt$8mpxHVTH z(MCnLyNP?;#JAkU_ua%ZZsIpcs1_Y#FJ%%_>z$Sddt#M}X1je@nU*W@!3^J|{J`92sqtvl$6KpcqLar6j#Ba0HiEH6DxB42q+2oQCd} ztP9BCPI?Ct%;S1DaT5|FpLe0Jxrs;J#E+0*VHxd@ZuVZOkoGq1{(^a~2a#b3}Em3eGI$sY08up~-Uz~bv*kpQ5Y@po%+8x`#>i*LFtz6ln8@vyk^Khp|r zGpcgZbNq(QDev|bZI$tdwy)?M4nuc=JgW3=69;#_YFr)W{Vgwv;--rz^K5n&4-H*ZfyeyaR)CGh8Yv!k?JS=Wypaesj()zeA)o_V#6a;o-~ zooaIuU25+-W&0?Bpw8m%hllQeR|U zrEm9KtuL~!)wg@D(^p*A>)Sma*0*~;B5zRhBIgEu`SnpejO5IRye#Tn&aFaJx(?yo zCPm#$&AC(3qbS|^ta*!JjUt=3TWSSzo%0ES%v?Sxks0`uY#MLR(KY+Eq!0Q$qWs3P zkk@Z43wbx0mxZX0)HpsRbd<*roD}k|AWjZZ|El^YGJQ4fw}h7QaIZY>t6B_fsD*^| z2@QwD%ApY%%;g9w@t7xh{|Z+x*5lG2Jn%-QQ;LJLkmqLTrE2V)gt~Hg*07nc<696$ zsK$BkX*fhO2Z&;*mMy(JhMVRbQxff#*V(VEj$(hbVtgtF7>r#b(HyG%fn@VWr_J+Sz>-yvH2;Vc6Erx^VIN%O3JSZ z(NIu#IUteP0*Rj0i&Al^pJkBaaFy7C>xaXJ)hlhwO z#F4(IKwSJ;kE@EX%ClJ}d{GEOfk=7&MsYb6ck%Y~B5Y&?SnAF2DaC>Qex>QVOEi6V zi2Q=mXyUx-fZ75tTu_eQ}zCH3zufdw;#FJSMX z4G&z1C_X$>{+^VeX9ei=k?xq026Ov+ON%OcXPu@Zys^tQ#+tC#7uJNmDyj+7`Gt~l zdYH~96g(sBZFPj{sq$$h@O~xm%o4aROup4)7wF(m)=?OFu`yxH^_Ge2%c$`KszJ9F zlp$dE&28m5%tdwlIVG(;CrtaMO6qetPCf4GU@ zq|BL#M5hU35Fffa&ex31C2W_U1^MC_yhy43?h@7CU84Fghw1c3Y4P4Lo$e_3t0i6W zl@j>=5(E5Nn7p6Dzb{NDLFK*jK=_c7Ug=c#P`O3BX9}ach>Z^GaJS(wx8GA4o7<^w z{^dxR8xDh(cp9GXCYHGh>~s@r-Nf6FsHoEAEWo?=*Ltj#RXPd`CSPz9?{E`WAkjv` zT<<1sauc6-6JK)^k0McOAUEt!?aj$S=3N4OVyd!@?0)*B5!^=A__}LREnjA}tcSs| z+=Ff+g#?Rxftz@bo4C?Ve9TSU<|e+3M0sDXu9-Vvt`jrSIyn=043%%fTXj!Dp+y@F zDkr$H#_I$()_9%Zrka}TusK4?H9|2iR0ei#4INA?_`DjgN8HTBRr%XW;Almd=f%(# zE-P>F^))A!HMqzDvjNW=S`YT|Qy#F}D`%mD>|J%VqF-~iQB@d?PRm;xvrg$Sh zFY|sQU$H&110}yhr#fRu%^`t|`OXgn-#-FyerOtpQZ7^fkvVEI^l`%biJ8Ik$9Etp z*HDZ<&vqWr3q;%9`82X2R(Z0B2|GM%?N56Q}O&%k+D0(8{pd|Lt*`qOzt z0(1uN?3Td0sN_)z)NKLazAS}Klb!F%l5;KqfG3h=Yau{R2*69*ysX7QL0{T#*Y!WC zFKsW-JLB!LGica57s<|G;9~u<$0hn@kDc;uEw7Mh?=qY4OgEen>$J^XmyQb|PeXx& z%d5&R(o!xql8h9EFO+Np%5t>RFdg|MI=70RL>B|FRX6rl&DdLO=xARU^3oc0oPUC5 z?2D&JFRM|<`AdYc7ailVIBSwCrF*$ZjIDcXysPBNv8N)N%8+~w)CvqyrDp!>4qN^5A1r0w}01*ePC}*OelY% z2_?AeI+JIV;I5A&fo+50+|!}u}tm>U@x>d*YS~ z@rSDZTOuiT@(b&Kk#F7mO^d<#C%&OCIb6+8 z3rG%EYaFiDIP7^^aJZIPo>l9Ob7s|ghje`{O_^#4H`LC$&I^0v zqK4W_Pt=F?fwePGUk&SnYTtIc4j)_sA5!bRlz%A8qwweO57$l&H`S7_ROO}c;kDk! zcN%NGI~|9yJ{113wX_|n;Q6)QwZ!aN??&HoCHzb2Rfa`3&8saySN%88l2v||<8P?7 z_5kS2Fm6RbEPOW=m#jNuwY1Hqq#UfJZTIpZakzGV$qJ{uPO_}d23MlcSnUx-NjSm6 zsPc<_L!o&T=(JGf)USNU{4b(QtVzoYa*^V zSIA167sVv4S10HsqnP6fIySf{^msh&Fw?#jY8Uf8N2gRpFZ9$aGN6UBI5oepL==QX zH(DGLUFwEJbbjuYcdAO7+*;Bj-#V=1r<6~Noe+~f?F#TjS=8i8kFGDH4&mt$u#NVv z<#^*&h2mmKarkklCYybi%k^Htb&o3PinZ!Kjmv#>WyCmm?KAi`w^BNMYfwH}f)u@! zo?|hjue;Pu-xj3m>?Ol@1nE}-4CkXLt*5BvJSOsupoqM}-_U4$gCBR0&##OJM2*IA zzLYF;vl6c{%eM<|rctYqM41bivb%fM-u0k~KGki`WA+#lFt1YZV6`h*`domY_-@A0M98NvO4 zPoMCUrc;mflDQ)P7&rgNrn3NPg)^5_F_&~;1XsJYerh^>-dZC7MJ>Ky5u9|Z{?>FZ zqN+q;?xmFLT!HU;`kjm5$J|2PE(I?y)5IWJ`QO{3K1igT_|QxUxw0N{#H58riEfvR8@m$G0IG&(|MdJKy9x?OYO` z&4+AqOwJCm!3dm__(^j)woWpsgoSK8#oW*dfkdqXf;8#KS_klO6t!magJ7ao_y`t8 zaydei{s@*>)_OKTBT&|QHo)(uNKn%oFBU%)DA`eG{Wt8wo8#nOWhEOH^Ibam%xPZ*GYMb2^pODye!%9l2l4# zKIm`>epklmU!{q100=go5e#GPwF%k%i%QE*Gh0x0I%jXl%F@P_!7$Ui1Q~50VO)kp z`ICurf_RFiw~cNyls}m`KZvIXd-=&kQ$CqEThb?re3iU|2=pIC+5Jyzg+XLA_6Mh< z@Yl#rU-B2OQr5DKzFW5G|E6XC)`X`{Y>Wl*TxNgx3apz=yg8XZp6G?|yOhL@hy>rF z&N{P|0?b`?sHnwP2;rWC$~dZMe87FM_5ptKN_e0LIV~ReZhV?Xw|sDx)AH$u4|qJw z2Qn&u!ficf<#-Yt!A zPo4&!%IEUa;KJt`!so&w(~>VW2 zDx~MVSvO399`WV`J@O4=Wlxd^s2}8$mpq?y z71%rT8|14Zn+`pS!%}+d%ArS#H^)+HMzKO0S6p@mGL*Eair4e#Igj zeyw5DydXsQD5ZZb-WGogrGMkd--oKXohvV;%rD_h_BD4dBOb*quZmviTsJRDUyy;4O4ohK^46n|p*~Jy^ zCxq*aqXIQoDas$xWVinjZufdzG@m^i7`gcOTfl#k!n7XLuBcSc@$?Y*MNX^DJ zCF|&rIjvlYBI-Gd1c6WCSbff7p(D;;BJ6}V#pf&)w!!%)2z%i4GGPOpUM_9Go^xDL z_&M{Hismd3Dk62wSr|}tj>o&Wk4NUd&pr+8)4)Cr?9;$L4eZmvJ`L>Cz&;J^)4)Cr z?9;$L4eZmvJ`L>Cz&;J^)4)Cr?9;$L4eZmvJ`MbzYal)rON}%Q#&U_Frk+$jF*dL7 z*rs$U(catB)YaQLe||ImHFc)PGs&?;wrNqzqQ%Fz9N*G3&rKbV#G=+kEx3f%v~XdP zNHi_%X=)x#k0+XAxzX*(RI+)3uogEDk0mCvu~d}4n#YoZ&9O{!&nqYLqls)Pk>7KS zTsBUX7xq+?W_vQ57)#`G(V@)H)@UrzJXlDM4K)vClM{(-Zb~j?Xuc6Ve469w@$q!3 zIi8uiVNOcf@p=UyecSBA;uCsZ#%Rmh6})`?hl z#K&MJwfn_U+%oa0{aM){CRV->6d$rE;WzvnlwUj#SKsXR96|BH6p|QEnM^ik710G6D>^U;=tO8B(93LzU`(x)1L*tYf&!p2+hX@r% z$+%x6#V?ygcr#TzQjwWI42@H~;FFOb1i?p!8txoBl!?WvpP_wXPc1=nJQf=th7s<0 z`ztl13NjUCO2#I97;}jv{*Wv4AIj_ne_zNI`R{e;=AVF9j=@5%IaZiVjwNH+9sX^i zO7wCW$iS;(?+>#wXa6COYl@@*lE6QODI}rgUGuiV@mQ*Qbu?E)M94$aQ(_{K%KM(w z{9|bx^P~Rx`NUD&-fUf3ahmakp!gsh!ZO^~gys`P@fyYQ-5)D|7>ZLqIqtVrK2ZcO zeS{6?#>RPjV9z!O_5yVZ-pzZ(-WT>%60lG3?`Fz$A)JeULQ~0=NoVshA3I^So=erg12Agl}X^2fL9K8-!nD2)qnq2g*+vHxlu`RmoJlcHKIvV zEvdJX4Lc#^Abdp)Q;Sy(wLO#&yYy8Jsd61kA^j5ELpgm$MQ^D~pY(*3)TOyZypT=i zeJqr!!>Xv4ZL#W49em+V#l0C+qOqas7tFx-Ph(1HU~~9io`LvkV2Oc{Sk)7IEBSC7 zm&M5yHN0xysYzHBIUyt2B8D!D<7?bkjaX4Px#4&;FEE|{5O+=m&#T5ixkBt z5wARQ!xSf7@vU!iU|O~?b&a@M{K`_qtD53n8T?^amcZYBPN^3BVNWf=BL6nwDuG1s zfnHe#|NDBSn($AdvLycY*h{7Ghh15MTs{`BBJOni!za3sf#+?1e5*k5ws&Ye*6eQt zx!U%RsagqK-;;q~obq=18>f0Z{b5$->|=PAvi5;m&U-YO!%jPHC;0a+)Wubxm&=eG znjET*y+6zfoYU2WK-BQ0FU)ezxve;+&R45;|JYs$un=sH4M#KZV%1FWRiamrAzOtP zW$u0uEAY+Z;#xjg#Re`j_l;daf{BcOlV|3B5G(MV92xX+kI3~k%-J7mIq$*LWEBez zV(kyJGUw*}aI`R1rPfIR-vr)Nj^>d>DuKHx(LAmvjK%VaDt7Z+)kw+qhUC<;#?#p< z4aQZPKMGSwG8)Hq&*u1W6`SfsHB~{Qf;8#WkgsbY`WPDYi!AtaAQvCSEn8n_cR7D3 zidQld9nQvlUVZV6RIc0VVomB_f0z|G`*Uu3pT_;6PQlyfioHw#pZMic_={q7{{Ap4 zbM_I$ma_JNIt6c^x+@dFC;n7YRCA(Bwom$Bv==A3L?hAK($cc$-bGh|Pt@|(GXbAE zEEB*deg!E~RZcAlKZq6i`jp+%_EgL#_S6zIqb1Ry#Bi072(Vd{D#%olDUq)-JV#vR z2XzYGKDFxY6A0iFzp@m=iM`N)FXT%6t6d)@QhqQibM~n|ulkdFul?azax51ct}^oV zk6o^X;qlg%Dp$uoQK#U&7hS*t_{1-lVq~I9_4`7s$k(Ury7_^*Pwa9DM)BBNl_TFL z>J+?vwm@$`3*ZyKf)uIT;_AYYQD2zloRdphsx&))n3XyERGhAOV($~Zf(%t%f2Rm? zZ|=Uk`0k;%c&O1IMUN`bioKy#K`-%YjlvINMZP}!)T4*^f50L@L*7N$>u%XQQWdo0 z>v;!{W_)2*;5<^Le@^;AtjKq7>|tc@Bco)x>bc1$YK7MO+iLN2xIfe>c<+twNdTYt zs zAFlEwBjpFN0^h2Sk5axcD|7Z~FuKhVd!OhPWGIYP@mv9!Tgn$^IcNWOXY|JV$DUdO zpGvGGhEEbx$r4ReIR=C}e4&@ikg0Zaz!zdgzCQJ*cLA9D#4eX$Tf)z)D0J@rFv~gn zySt@x_J>){8TTryn{s_2R^Xc+&Q~38<@_QG{&d=yNoEpwy2i(%r#dW+Bc9sYa}_f; zUl@v0J~lY!vtd3_6tA(&xW7jELQs5SaUT;CDbE*z;G>VHe5^{}>kCn}ZzSg< zUN7o5Y}du8ia-T9M$vDU#O7tmY7|B%A2}K$Fp_j|RHyfhy@u6x~`6NYE1j^+| z<*Rr*4e|GdSkBk~Jzw1n{9}71kPosA#>cC<5>Op>MG5E)LDBQGdmc!+T97jM#(y&@ z1MSE?mJ}JDpB)+boR?rv= z+V)qgB|Fq22)7=xPX;1Y(Epc@;D@x1HSrzCP4)*x*tP%^Tf`X8Q0{v_voyA`D zo-?lssbb6hZnc#(+b{Z?$RNj#T>JRkvaBf9UQsNO)O|hkq(-)Svy%PvZo0HWXE&Io;%-QF`h}-in zd!OhPWbk!9?qTl>)62P<9RrtlHMo_y4~-4_cyiIp-5+j6?%3+s^9iGbyD!|SxV!P0 z2r}KRiM^3&Zz)bCY4zO%MfpIUl7D%_e6HKe`)|=+)2t|MZhO@o=m)hD?{sF!#}x># zM*QJc;_m;f#Vdh-{EAXkt^U2%e$~JD^q*Pn(EH^FW2qtBYpG)UwmNLl0~9?B4*CiL zszCAfc2Qn>%XD<O3C;k&c`6e@kOk=UuMUz$RQ599>m%tQq z_}gkK>nMNdQ^=4nWCznxKSRDu4*w*CEHM2&pCNozF4AvKrTyGbrNQVALvb3(#xg#C z60vet%)fFOK3i?9=v|eIY15S-*UI zAt*k{jIXmw>L;HlidQDR-R};QPZY%qdx?X7nfb+0-00m~srU}OlQZw*#TTT^>M#{& zy!6}ukJI@^QvA+O4_47i|5%FSNY?MIT|WpKpA3E-)8|j#jrhb-+!Dh+-^1k#LGc+% z=3pR$g?!rQ-fmThif?>)WEj8K>ua9Io7sFKDSm@EKBO1m`5%GRVJgnJS?K>Ehqpp< zf2Vk?6(JVg#K|>}kEKVNbLm2s9tOwyB$ppLbtF}2ZEae(Ax4jsZAhgT4khp&^f(kT zgd~1h89KoOv+zm7L$Q2pA$+|H4;NCL*7ESKw&C8M&LX`eUMiT3C-V!7bv2qz3sHS7 zuD6cI#}O-yoeE|nkZc@3z>EiFa>@9@Og259&Qo428y`J2w{^!@Y-?g+Y+`b0E4DO9 z-a@K?-+eAJ5SbMyP~Ai}OGez)w0hOrGosyV+B;TtcQq|s-?Xu>eNA+2v~PX1V|~vm zmDS(Ax_4D~dvCAG?_IlURkXXKV|{e(iWRHYwxe>oN%UoU@cibAKg8trMe#SI@uSYo z{43J&OcXB^JU+dLzcpQohfW-xKrbZ+PwhW@^(sK4iDW8W$Sp*_E=){fPRUX48P$mu z-!nWTLpMOkEQSX4bTlzGZs3O@qDef&FliJZ%SZ}u4@B=6(P#mG7B7nCjbdU9p2h$r zy!|N`rv#CVCWnkvVLY124i*dy&TL*J@!J83>_lS7NN$Vbmp_LS*=TxrIF|s0Q9O|Y z2B6=10_Ye27AuY=Qbwi==B#9jkH)f6sO3^7`kU#@XU7cgDpwvBE*fp`>ucW>?e96K zJ36qbw>ug&hO>!nYlR4+g>D1gzbt)kb}&v2;=lPFnS^Lm|Bmq*)C?Y*T|Ir#^{Z66OG~eA z-za3vY|Tf9l37t}O-Ik#0pLXYJNu)pODkk9jxLkgH2RmGv8GQ{B52h>w*ra`=y%`q ziTJ1}>TDnAK4Wd)rf7Q!+))A-@yV@@q_aC@`P$XJ(Uo0&!hX6ot!ZD~(^;vgf1rJ! za*3jhZj6o&Wut6Stg#$2$`ta^!5!Ew;Zs~8 zMo)B|j=L_}BS8%(8QrF%baq7hH?5AY9cYgZ^sJUjl$m`SqZ@kGK&mr(*2s2>+OnW~ zO_wKoV5<7EptOExZ?tRG6f9I(1uR%eWx;?Y%Sy3G^YOuG25txAjMYw_iZ$P{VnZkT zc6Il_%C%k5HEY*MHF)zoR-Hxj$3P_ ziu%i@$X`B1{)toMw@%sMsamY7R?ZQacoCkJa^PvAj6CO-(dOJTopElNW;nM@FPvMZ z70#_7F}scK&fdPBXwSN6SNlM_A)t<)0a(Pk_1$Y=SR$)$AlkWh%|PGUReHrUx-k_1 zFFFAK*}nq*M%M0Ly%sKLb@%FMduL~Nf4|J{>RyHUb9Hxn|N6e})!l0by!HFK`@7w& z?z2%G?OD^+1DA^_N7h{3e}-_K)Sg5AFslt1B-%h{z@hua0?_M?PF%$J$kE*01j9 z?!&+z=vgBjx~E{u+^9|*ZUun=B84O-aWbql0;wT6(;>nkAkjV<$KNQHJqAsd(RiU3 zMLk0TqN9j@#&mPyaW|E9Yhs>NXasn$xRj76QN&^YpNLJyiFZ0RoE$NRM_G!Y%+S^- z{cxp`>g+U9B%t_SKW3!bQ~B<(@qxZcBh|I4eK5Boo9Im=plLT!@M<2oYgH$HY&Vfb zm2K^PD>~OumC~$yKG``aGy?X3qH(Na2Jw3W(czTArM+0dj2m#%s|&=m0~*=RaSq5S zAj6RewM0fGok;c!K~9cQ5TeArQOh|9YdX`}EY*{h`ml7wMoPXPA*ev>OQ!*CQ*@{? z{S?B=3IxlDQDCe{;-Dc*2xGBa9-$xgoJU|IyJFfA2(<&0EcA|tJogd z0DV3G8Hf!{M6s$F8Z!nK#iB4?9g0orkSHt2nxf2wP*%tY5-6Z#Y%x(2e`AxzK&yv3 zL5jL6BYLXLg(P)Zz|@yW>i7%lLenXFL|>#y$;pu(UdV8vmcg1I>`CX>kM+l)iNRz# zkC*&Ma{x#k`N=4CV$o13Xc#YuL0gET8?eu4;JvkA*4b+eAz<$1pTx+m<IEu3Lyv zOm$|A{%o!*F&5ha3o$YUT-&37U)C$a{bT985zi%y6owLmg^~VzI%5=5o#_G=V_iE^ zvGHV_Tm=FG&@s;F?T@yPWkyA+BY~w7NsVLoK}(fEv1TEeQ$uji(ngWYPYxBtE(B{sS)N#` zNE+mVFw_%*U}^=Wy9$}H#N+@ivQh&>L%lp8j2tOObRU)_>}9!%Acr#7rE!KL3JzKH z8jW}=8K8v#B|0(I_%C9rl|xykC0A3?-oEzEmBmGt1c&8#BAu+IJCj&^iNDN|?3lR< zgONPJo%>PCL9&9fd6RA;$BVFbd;+liQ4Z8b9RRF}xv>92w2$bU3>^(}dL~lVW=%L(-bhc{@ z{z{M%J2Nznp?Q%-Qy49dD2MwZ9(Pp@4@mS^7uvb|Fel~*&U|LZXnMU>Do-!^8Ng8f;3VUL4~; z%evu^UewJ`#)e`USO*j#wg+2_sYP&P+l)dkTVxtd7pN*Jns)@rX<#D6jE|JiGN-_s z|4IuPzrf&r;a=j&4Lv{vatM;pNu!04L?$+Z@qK}jqtVWxy6gfBd#pY#NT(2qQB1`~ z5ancI48w);MicnuIqWM?8jZ#why*ZRCtyk}nkY_Za&mVSjwCjQ_!l;1438CZqxn(j zVAQ~-w3v6nRGH4TW3{(;pW?nb6yZwzB&NS9kyjpne&423fd>Pp$e2n};PFi#KdK!}Mk36rI!0n5mB@Xq!s z+8C$6OMn>HZX!jSx>zW!N~C&H9UNm(Jp`0%hh-5$HW8`26*7Ia`^wG_Mv3(v^Dr{& zF=BXA9J3(X8TN%^oWXTPHKAkO@%87kg*XgF^NVsK*S(`E?(@1$y`UoAO7_TQSe3H7 z5XZnwb1PP2GA_s9%*s4EDNHVL=pZArr@+bdO-@xZP^l!J7N#P)7Q2S96EfK-4R~YB z9d{YbuAS1FjKpLnnT4+y6N3=bEX|bkCt;+w!xk#oEungaA_# zC18d)Ba0x`%`!G(Hqw}_z{!9H4#Y;__pm%qAk-O?UI2fwaX3MHpZMv(aRiom>}O+^ zr^av&4?@bovP%4+wNPPD1I94y3w@K|wLY^NYdQsB=_RE_2tW&Z=nRug99xwJqA=cT z#m_AY>&*?PqOf1=jZm|(s>WGU76MTY&Z0ymMUE7}I->AGq_F8NQzLY61icS-q7WyF zS!$1}&P4`If$$Z<7m>%(wA(HDw zz>wl}<}3CvI5~itJ>-KpP@>{NifyCVNMQZq6*cf0ZZ0%N9mQf}660p6hHD_T9u+wU zro(C`Em253K>cJCiYX{p9QE<>9_3RgCtQrX+#N;`i`h9h4Ag=2#_=R#dkW-oESy{+ zi^yvdh0z=~TbOAkhS{Ip4dTFL9L5G|uvQkqiZQXez^%{a2KleMA>}R?k&k_z+=|iu z++f8aNUnj3bO$DlDL2TTIhymr9%<-Fu>z*qqC{?ODQ#If4iMdu%&ii`69bVUOzx>1 z#b};=t0D>yKoO6+MBtjCN0%m7fLC*23||FsAv-Wt>;b6)iLrd=PM1(qqoq{iN3*zIQ3F-dt;kyrrPaNepzh6(+`X9~ zEi!m$V9iV!$-G?H0xptqD^NyB1>TmCzjex?xG;YaeRD<*I~f`nrzuI#NTzt3g`$qu zV!jy8F2F2Z0OGhw7S#pfMO@x<7nUsE zE#WE~6I3FFo#714bc^Vvr=k|Neul6~k4)GODv*PtzXh$L>-1rh+%|S=BE@^lA~_z* zESeZL$Vb6x(GDBh9>tGYM(L&rb0MJIri6g|cKmN#`&KNJt6}fcs;(euP~|v0*Sk>sKs^GPnrM2g|+a67q3IuEoHfKyI;-TWS=L;BZBji9yb1 zQP?Jis+b&xKsJWo0*Gab*MK;nMN~9Zc`L%&Jog9wLZb!-MkgY7zKDW!kA4@W5`A)k z5F3jn12ZH0T5-eytHgE_M5CP^`cn+T#O^S%nPr2B(Bfzcv$t6B$Fn&oa7|&nxM|X2 zP~K>A7!CYyg-m5r(bSH627T>a2)1(MU1)casC3|Uzwoe{>K45z>(*8SUWZ!7 zOAWCUFJQe`po6HgCY4l*XLN5?L8~q9KrV1U7~&6)(!!8ukQVzxRB`djB#;_tbt}+j zA6H`cL?_QQ|6-#U-*EDj%Ugd~2_lDAc|5ZNkdu$L@qpzxpPTV^Y^tvVZk>)=k)RI7 z_A5p)@K9~548Rct$?ea0p0=&&`~ejSk30!=iTK+=_RTJ1a5%c14+0Riz-M3wPdYBl z7i_5V9v)#}iyTLmBWw&TJBiRUWblt}0~hBFkYs&tv?#1hlf1oM>!WTPNNr4|$elbW z1>k%|5}Q^yprH(Iu}q6XZiCprrXBw7$$Up)m=yv?i;X0*JnjMDx3==-AY7spn^bQ1 zDXvJx^5Qyp!Vr2Wnwh5z0No?T`Li1Zz`n{eWoRI60C55WyCT7&QOR~LcCCi)K4$W` z>}GH*$?;e=okpZXisL-Bzed{~Sa^tB+Srx5s0N~Gj+uxWCS~m2V+N+$l!2S6-V9v2 z6dBRz1kPgEiA4)Y(F9TeXLvP0Im93d1&%LTdP0(_(_c?@Wa!liWOZXcOJhGnbY4yV#_CZV#2@DC&=EE%7!xuz&%NQKMfDvHprMxi}V*2mJMOK6a{D*@9 zH$vdj{vHPLr-bby*?)B0!$u8Wi?A-iL`(`M+ZFk^TPqSY2&R-}DR}`X2B(+fas1DY zO3vmIk{dWBax8V_7~+9UI;GhrN$zKRc;tvqVtyutT6kK z!7QD!Nti$>=r|)Q=2{Lwx=Pj9+9Ko!CDg}dC3p={2hl36JXJ?WvF$#%M%=}KXOt^gMJc5^S}at=PBcH7%ntEp z2X^w#7hwoggw0fu$(4rj1W6u_gq8~;gVzrXL(vG{j68PXIVtZ-&|FYDK9*oq4#^-_ zb;FWkhskiR0_F*XS=x*fiipyYRzN(l6zRkw(urQ>W|QNhu1lpj7h$>|N5Cw@eV7rA z2WYoncx)^d=n7C_e0{eHz~q6R^g^<+Ie2FHo5W;SapcMp_Nug(p;h1+Telb9>`)#H ztH-gmrkW@1qEtcfFZwJ-!-so;3Db<`b_BN|vl5{$ z?v`O^RED@%j#G&1;*?J1?74`+81_^7IGkruc^J!=_X}fN>9jY>zY=4l#Nj6knUKO zFiJtfQ{No;0(D@BVf zrP)$DDH>-A?qtW2ySObeK9~{Z(J0X>)}TuzLo%Mkl@BUhf=6)|vk#jULQPST9)t2FY^ByOq=VJDYQd|j@?XlSuI z8?swc93?I>^7b;?6CF>B0*JOPE$(`{h`2|c#QkNg5%>}zPZ4S^bth!u_c42@BDKz- zI}Pk>cm^PViF<=SDs!KY)Qf4T;exB%DuL>}wEh=UDXp;zMB4Qa%`!Bdd$E1ks8f*n7vVDV;b|0w} zCw-cwXFBN;F=wMS{FnEfda?C48XFttM=-==3cRC3O_YN~93vve#7cs;Rs?MY$0o2Y z;N~F$0yY0rv~Zj0Eh9ohyfhF%U>9$ptN{_h%6D$7-NHW2=&(Ce9087sX5^AncREx02J1sW;}`5h52mrHC{_ zCBGILthrYHUQFMeol%_lV2MV5a*1suZ+cSgfQqvws>wDjKzJ%Vd?cTJLZmt&lbF5T z2ci=06Hx*qg98t>U%*#KG1w9>0_y_R;qx zbPbUIxPv>dx3*LrT$7{e!k7EYO!t_@?XaQlwC-c;TwFJeu10k1(>?8iKAkf%vgltL zZ{hs=(X_@58#l>pnAtF`j?QJ$Oyfq48#byN3Z;a+DQ3pSp_pljF_q$rMV7~eLYER( zlK1$jeXP9bn2^{hpbGM;9je9o_R`p8*3IGYYwvwbNh`v zy^K8J3pg&ZD|bR(-cLr{cwO(pdZ&KN_3kXSZ*ptisujaM9jd-Q<;k{mA)(MqI!g=c z$SXK4{8m%o0jmy;hgjS82)r}6%&6nV#7jyGOhm~dU#>`>PA zF@EKz?V8$&^KLNmzN>9_e%=cbqPA=6nZMiq(kbsbBX3JxA<7#*>-HCF725VGE?vhG zn*W*pxf93jh>q)N#KoEU_7}xnKp)OG;$HJxpQ!e*_M81r8-&~A86!_?uT+JP{Qd{V z`?U(+@n-n_bH@9Z!TVhAm7F51W~>j4|1dsSC48GxQgPmVBkzs>Ja7Jg%e&vm+u5&P zz5a*gZSZ&fq$!m*y;xB_WNCS$#x<*Uj1FuP%Kc`L@wu6rg8I$;aCo}z5V<}U7;&>T z|M~qJ%RS=n>Vud6fsuD<^zv^smmjM;XNqa`&zE2E@0QQw;~*pNc4PU*`1qKPk6aH+ zjd(k_{qT6>+rKLZ=RI!Zt*d?H{QA8x;gjfbwWQ-WE_o}$d9&lZd4BweE1W04y!S+p zcN^0E@^(zPht`?%-fHBnqGR{@c`rzaKHhlRw;y**=)=Y0yx$sm^MmUb``NF)^-EEl zcXM_q6dTHkr9DDS%-MvJ{KQ>|{>5a`pIqtx$dEOyW%I$!n>L`^olTy`_o&Kp&t~|{ znr?&Td$*~O`}e~1-=u`HCQQtyM0BW|MaQ`mpT*~+d~}E(QgJPWsc`4E1_yXlu3;U)3lYECkheuG9oTAVc4{k7}R;qJ=Fh0QGY8l!jdlomkM z?S7n2Z@k61uiPKm(rX&l-Pd#yM6ZG}^Z!4?S>0Opa{88F_|UOhi&=7w*ZrLS4XgK2 zuQ=ZA1M)`v&0@`Ty!gUuq;>LLKA-J)tIt;f_&bn)SXikt{);>B6VxWdhUd{djRC%k za(`j$F3X+sKBW~+KRzR%rX4+fDU_u_R+ph48F3f}bSiUXfVQvlUR zU_msY*=wLMZpOkthVb%*VvB|1ba)C`FNI?4%EiNV%iATLOxt$eu{(vrvEgvtvQD^R zl3m_;#>uuDIb-auBkVEO)LgqBy)K-N^~pO|i@W)7X0F#pV>{ zofMt7F~vrzM-}4y;Nwz=+8mq`6>OAPGMmAHC5G7g|L+nvvAaIP)pmY~Bbi*}@=myB zsvTpM40nzRm!i=yR3JRGwwR(0Qq>t? z$Mv!6IFaRcT%KbkWm==d%{fO!eoC=M(;M-T`PBAt&O>(npY0CqsoC$H>$SV>TuZHd z+5b^1XPj5RM(=?wzB)JD|FFfMpINr}$P{ek;LvBz8%P3U!*%|_%0+0K&2_9V==8L_ zb@$xxaBkHPL*b4w;U?!b>t1Qra@1ByQQLhAZ{V|FyQkc7?uKub%yuH1?HbMqyFG30 zbscMBfnAN0xWhmu4Ff6U@lFr23@6f?2B6J$nv>;lSeBjE=6{;0X_Y9TalF7DewdaM z$)esi*;`P$ENI04lwXQB*^aY@MAEEUyoI!m^sqZp))?pdaMF1d`C&N5E>S#Ov#cG7 z@SsRrT*1$~4Q$JE*C%i!9|J2+_rrRyn(W8@1 z4-uX#o^6M$-Lq+L6LG9(!`V(At$Gu?lC>w4Y1ecjNp|CGyIz4^mRdiNa%Va9XfKmV zANqY3<#w#+!aHp$nwx?uZFiWe+Bz6I?6bGJ)#A#IO!JEAGauEmP7T?#2OOLjG1gVoorXM z((_03pmz)GiaFH!U)WWK*p=GZ$^EHbvuQ&cL$$WYF6}&LSEeS8RHJq0s?50FuCs#D zMRM&j&U`!4fr^o1Q)^Ur8qw@dyOcA~j_E*aF?F5KI(!@J*627|NDj9~Pdo8BULeo6 z<7QbfbDf>)So7>iZlsr8=O8U~xt*G4cg$g)o@4jzY`3Gbq~_2;K}{+ty*Gf~E1<2v zhaJ<m8q<>x>cOEx}vr-$}ayrja)Nwt^90SC(7tp6>{yEwsy(7 z;pWM9Oz&{ac~$&ET#OxGoc3kasjBHSNzQF{MM_>ipHe4HcCD>5%`Uxyc3-qi&fJco zsH(E5imbT9wmsQSwk9pNZ5re33XAB-WG4+=$Lw0+T8Xh0?69?M%DUKMcDnUOT&7*4 zEj0y=ie(&1*ot~lwoRX+-aIVdD#hDmNvm@Bf|$GQ3M<`%%`9rr7W3^it2_l-!*XnQ zn6*kCw;NdbkyDTK@9~J;W`Ny*y2T(nWq{pPS;D>jw-$&%@(Y{#mWLrV=i*7!VHUb6KyHE|@8?Bq}gZKS`?&a{qC<5gK#EXPh5 zFv^baLFHLFhh8|5H2O%4WBqE;Uc(xjy$cmops!)o|qi28x!Vh4bexV zk5X}Bil_Lr?`F9UkmexVjXwflwxs# zi#yiKAs+0qsB);LKAs*qObxc0n?9auzch^}6|74((+cPDF?JOiF=|k!jL)_+X*j6f zj`~|JjSM^NN|DAibbU3wfa)aP`j2y*KAUfcv+ejyyY&As<2cq^G>W&f?wPxj`ot%p zTMp@q!QH|-LY>qbKdoQw%~Xo&)?+bT)XLV!)3R6CwfoZ;lt<(3 ze0ko*&(7q?N;|Hn9oa`as%p+7v|pw}*aF%bY3Q9smP}1iZa%%0XIG^a&ZBomaL0ap zMm{ahI%Ma&K_fV*It8VfK@WRD$EX$gq>D1G@PcT2D$KNDMgeE~go3=qmF#a<8D&>! zYnPg8S6Jb0jC>k1!cJb%)=spl6xeY`+~z-HQ#bk-+dtoEe;yPHYdKqLIhi(Z>T1*_ zsCucpJ3M5hSVsw~(z?gz#?lD>jvcN;2c-Wu-O{&MDb_i&SOspe>RNBkq1}%4?96Pt z&R)AIZ9tW??S|9{b!g{1yscfOp<9V->SM@6K6Pqis zytR?AB2{Af&3vrAF}8s0=*;XBcIpCZ^xCJWk5I!qk^XL}kH!9-zZrgVDenrvgg5-K^q0 zZWVi_EpL54Gdq%O*XU2(JC{b;9`u|?M+kgfB+;?X(!dqB!cOGlq&-yMC*0~jVetXk zzt%_o+lFSnZdUfT!pbhNYgzMWQ!l0!s70l3=tQc~OrCSMU5O9o@@PnV)P1K44Unmi zx@F&M75qD8rxtJFSUYF&{@Af@kIji1F0!fX>ZqJqI9{BXnaSe?9qtUJPgS?p#qy9` z*80y(I(#QD??iUFhdXagEYzd zUi4rr9U%NG{f^2?6}fe$x3>4tF-Fm@KF2wH{@T)*^XUv@eeZI&p_kfJ=tj6J5F+8Lkr>n+k z)CnCr*XEPL&a@(VJYfFFRaM!#b>?zv0^SbV()mlCT_KxJRkB>FspPcDvTJAA724S~ z+tM*kE(dX&)T9Gj`bbSW3aB@NuYKiGQ3g?0=I0UaGhHwpMu%lq724BT+wHu6r*UlB zaoiM>>Fmj);`E{e1>Jrk*0yPMD#@qNPtM>yfaM)Z(BWA8VRv)5k1o0XD;0e(}j<;S=0~mxdq=3^Pyy__3-QhyWK*&`U*P3$)&@Lwr=aCI&Jz- zq>nBQM{=#zv({OEgy_t|x^pf+9<%6?jsZ8$3^$Fj7O_$2hA^L=QKxxv8ePbu-u52% znmFrVjC7_WQ$2qvLcKAL3J^IJZgt+N$|EJ|f@kq?g9_B63+zgcRW;l?hUW9_5_!}H zjlARg>*w+&P>NoJt?Ocz+g+{ckv%kCQrF6}E9Dj*7(YH|`M=p+17I`b>v1Ei@QDv#o z$?ioPS2ZermG(xl26F{f^RJ+%65I-Uf>zgdZga;8C8+`R%$DA4HJa^7 z#|{m+5-x9O(MeV9=Cm8gr8B;^?sG+lu9#V`($-L#E-g?O9-qsD!vojwXh9b-eoEL( zoof7YYcO3$vAWWkdN`x3HI2{MDeMmp^SPdSBQqrQa7BI&tyE3xhZ59&e2pxJ zn(>7DOsAc0$TA5zRU(rH#-3s8yq>#<5;iHGY<`+fS$#uS(#WLCUOdTL_OEm{60qz= z5_0DJ5ZhVcQu(EsRPFOUXOZ`a>o^?E7>&Wmy3+BQ?H~J&82aOFYMZsfv%oTrz70? zv@@ZD3Ld}P+hw`VxHTS|NEdOa3BM^tM_kr8zVOwQJ`=JwP0XZ=l-7w-e0;HshOCki zKA6aHPv}c|S6Gv2AW5ZbxsjSqCLf*NLaV}8^s;O_+_;R-mH)+wF?M;rB5yU;C59)Jt>42-Okx^wW%7kOj+g!I(mP*B`lh=%Ki~8Ys-ViES z>q}GV+S$Dp+I@M~lH~rVLHk+BaJ}->$us!`ZV>gnJ$5b9}?B&%NSl@0tJ+?uI0n(Z2kg=E;Le$r|;!$6oVzRdp_1EV8YP z9G`DnPI*<)$L-y@vf<7($i$Sb}PI5D7#);dO>Gwypht@L$lr{<6A9DlDKli zH7juK(y>Do>e~?~au0o~qFZ*lV#M9HyIpm_ZM4gBug=FgUG1851tE?u!-ca_?P~pa zJEC(F+KlYfwst%(md6&}QnUOz@K#!EHEIpIUe6c*t2>?Tj4pIq#fK4D^qf!QKzrJa z)8aPMyIE9kygOKAr*JdyS1FIWt@!3RKANj)J(84Zr?t21T}Bt6X?^+HS5qnje`g}2 z#rfX>9iuY1BO6@>s}N~IOQZ`>REuu+;;(YrQum_qjlUq{uYq#pIiFf}1sxqMx2sa; z+f0Mm@^SQym1F&qM2C-*q@?qQa3Y*%W_{o%-1zPw1;=qfF(K_VSr@m1wM&WrZt{HaX4OSavctHVmBBi&{BI<7Cdb%W#lv-yWu=<%RrBa;=kk5z^RpxQ_#VBc3-0fRj0^5wMR;$NFS;%- z73BK$g=y%+aYdh{SGDmI$N6f<$QNb8Ruqjc$D}{gp0$UymCkJ36!gh8bL5k?ot1XI zqeUCzUbhq1qa%Wf)OPN+_@yK{O|AWHO!#Wr@T~ji&`y^ZP1|x6>QNE*r&krJ%yp@i z&foIr^t<9_>ZNp)>-4oVhRP;0pPrXf2VTe*nF2PMo{qIHhPE8*#GFWyY&?8vq-f*0 zx@hB>K_%gF<1}~3N5}27ds7uB^X{ALE@Z75OFb{$u}&w`m|1m&9pB#VVeve`U2VsY zq60KqHTveSW@M2aM`sUJBX5|)1f5r=&bQ+i(qj1Ba~EA{dOIe3A)T&G38$PlcCSj| zV_^EhRJ|A~RhmOzsg|JDs_)RzP5c{t-a|*DbYA@Gv`7-|80d@orgY%S`~M#Ff-Z_@ z(@Y9~{SdLX7t5w$yt1?2ZJ27*Y&6{Q;pjz#e0_npdb%#b#9KX|=5W`iqPH)0B6rgpwDvUqFw@y59bP5btv1sO{=&xfUfxIPDryd$_|O#vKFn{$ zUr$kE{Wi70ZL6TNrdjjp*pLQguZ(|8qxG$ zn%3gfOuJ2gIy_iTMdYLV2 z)p1F!zde(=Y=f;|=*`;H02k9mGP>$O!;xd18pFe7gbo&Xkfg)rEpvGQOK`t?Oyt?5 zb#`5PqM_}F6dCF0N{aQs+;FED>g=>EIy$27KI+l#nRk|SHcr1iqMB@$LnB}02+eQi z`Q9{YH0y8oCTT%yQJxO680nb3Je8>#Z^LvsT0Yp_`yge@v1$G^dA>Klf<8^TbBQS* z&5m%w>HIl2Uy8FpD{IT-!+%#<*1_W0+IU;t3QD(*756T2m!myRWGDSRkw#BCW@=1p zmQBm24Yvj@GS9v=&%Pv_m1K9N!8N=0Tt~F+I%Q9WUU;@=Yw>a=jT*f z4*jOldObt~bA5`sJlpQ)@DA%Thpz3^r_&PJs?)f;(r@5ekG8L-)>s_l?4?hKYtzr9 zcE-?ALY0;DGMoD8HoJwjelGu*N0ziKdP!aBS1I+6**9@9D$(b&?dROj?{h!jfYzls zHOR%8_C?{wNp>1-Et&Q-=N>x#`_CA&MWqjOaRa0iBVbqT$Z^IE8)+ zVr?2zK&J&irSKOI`SeSvBeYi3q;wd&j*eUQ(oT?$4tDasum?pP=9$TED9w!E8E1Z^ zErso+`QTfF`GaQjY4%Zj$fkcfd#ot- zU!HA1SDk1;YfdeHV+=J(HZ@68ZIY?fy-QdRx=m82s7a0#HVOR_x&&SM9!)2v{5y+m zt>cHv(7}TB(P*yY&1L>!9Xl(G8eQREqerRR)NriHe5zb>v)!>j{R(Lw)vw$3UcLTg z4~f*5irr!l+3`puzK(V&Im@a4jimE|n#nY1%MSUcNt>OWd9+=3q8$>Q zB~tI99TN@8DQ#)MtYj^WFB~GyPU0~%&RRc(Hftx`D~ZNC>xa_eMtsE}p9i}8+`V86 z8n5d*{Id$$hkPr}D2;T3S14=TbW|p1#+iUlH`8pMCIE zfTeSfyTf+aIy^p-M1wLN=IZZLym34FxL3yQT}e7_H+HO!;odQYdnh_O;!VWcrADgD z4v_b$M`(VXxAR=#o(<4WbQism&nFz-K6M0z?6h0$q(-KJn@>Qz{pbpscVlFq>h7j{ zQFm^`A-S}%yBWPI+CP=PnBZfgp#5w)>rtvD*~`A=?qzFRPf_hOqmQ`*adjGq=@+cL z-=$v>(#9mCF#Sl-dUZ5!VKfTASVl(S4??uBDjbDJ@ECmD9D_U3VL~4sikBHfF?}z} zLveQ0P)vvQtLN_FQJ9ysJ9MzNL=D47jA57u*W)}4^XQsiI3Cl`+aprV?y<`qb63#2J>2n`$Ke&8(Kx(N z$Kl1)QFt7VlqnjBpDh|(|Lg3RMX~?#Y`Rr^Gqnqi5gqAEyDVBo`mthV8V%ae>ebpu z8{%ZzKg*!;>6AP=BIkoP9W{2jqs9n3r9W-D>DC=_wAFh@g0812bktYZx|dI*3_|0+gXP%IsA zQHQKbvk|)18KKj&x2+u8I%21EryLRMky$zJwJG}9<)xWND9iTgIh5rMI*rfapRP8b z&RC3&xZ)`heV@*=rD(Q{wSGokEPYpOFQ=VXj<-6Srx4MH-=T|E33t#;27l2qo|a9Q z&5QFF*Yq>uY`zeb=2%B&=FzWS@10ARb*!cIt#(Q4otgZjG(M%Gs(Ee}Ex4rhcClQW zF6jiU%I>IDd9G+xI{U3kyG*||30teD(KT!9clvQf;reg^*Us801uRLwP2_9Za<+He zqMb}G|9o}VbiU?wlD1W@7utyr*lfOWPTrs|dKzt}nxUpUm47_k^SrL{SzL@=h5k+| z*>-wUwHI@&E9nbd>(*&>&Bt0vUqw~2zNa6*(l6j+xLIh)SJ5xutT!otsrgjMN2wg% z8c?^gKAu@X3oAp-KtHvmZ@1j8R@651t@=N08#=>@Y8$$^KtGB-T8#Fn)@eIsI5kx< zYRDYgnl7M&3+t{KT*#sy_tI6Ncd2O|9@VMSoENkvVYzM1_m)FH1Dv*#u5p*7UTNKD(Ql}G*o`*Y3BB!xZS4f>0s0fQlGgjQ zyRKlpPyHal+2dFbS~(-^nE6z&-=`g?g6*Noa9d%=6yAWSm;G*qb7JV7XY5?}dp7=? zWxwfi`lH#{(2sxly=U=XIr>Z%|D~|w*Dp6;7S3D7xKW61e9^cO?M2&Zv=1;}7S3CtL51_?j1?Me zzAT)#LPHDZ%^8dSmrb0$piMfIFy?7#HBTulP{$!a%$ zby->{r1#hA?zW4L)}fHzAB%6GkQ6E!=k-2Q+{69Kvw=J*R5adJqvi3`n)3L?Z*uFu zXdKr2ICTxE|DkSt(YUJjXR7Ra(YUJjSNe|XAt_WeuFmv|6WZr`M|l+r>HU&cyWY9b zm&)8I*Si$D-rr~p?SGR(7Z$qSpD5M!qH$I4L$t=N=b~{{?;~_QWk@o{PrVON&47B_ zPkH?6(+cQ^6$AXKfIL4?zbad}Rz)+929#$T#ru_q?+?Zk_h_y?9Vvz}(!^UpS9i{P zI8Ei@iH`(}TA5x@exB6(crQaG#W_z=D})NSXk4!DaX7xHbwY(BHkRj7Sng<9?ojY0 z;^PC#vjyTMJhTg3*K1Eep06POK1uX5xR$3qwL4E*ZyMhhT;s14|EKjyw{3DKtj~+Z zb-6#uYuz)d9}^!d&$!$hAdlAnDsauC>xX%G9OjAL>~9yz_=LUy>QnQs0N3TN6UXI# z3-N9t=;3#8ZFeW2{_8<|X?a?JYkBkx3;TahDFBz#?EiU&YYfw5qkhcz%3<#VoX3pM z5-(5QhW=@LWrH`CyxomF=Jw0y5j+NyKul4gh_?^W)*l*-9m-`FEKPvH-lvmeF^CXI6 z`5Qv~o06w3xaP?T$TJ+`f08`cf@>bFS1iwM5T9DYThaC4n&&Zb%<~$=Hx8QoaRATsPi_Ei|fFikMLt<3XNoXlf+ zbib#|tu4oYS4h12K=IMySRQR(%)i};H`}E&)aP``Uj_U=@eHG$&3e%BP|NwO#Ps2-z4+8UTJcir0uBQMf@d+$MSpxc?L=RNpQ{cTR@(w;@Gcr z+t>1ZF8N16{+GpPf>)N~w&jMGlX-r+-|#jx|D)_Lo&s+u8~R?u_1J^yeZx7=If?%d zc(&|t=$L`=!IN zo7;5>8PGBQ#sL3QT-SHK)K8-92-QCmuMNIR>a7*{JK}x7zZbs>yn)o)bnyFS{nv@a z9v-{g0u{2zjMl>FZWO zJ(uCv1C4qc!XVSVP|w=mwtz=u``u;aG3);$h)f;F@PaKpy^Hm?vFsKgpxtBdKd1J?_PRsACI1 zccFhWycK?9%kfvyKb`u>4Etb3dY)wXm4@FZ^I9I=-X8@YDebG<7nbuqh}S${f@_|i z#4(Rv2f+2MZNv|gd48H9^IZPAGS5%9$-J)D94Y^L@cYFd6UXxWVz_xc)(!gkvy$gB zaLs>JK>wHY?tYN>O|J-;`(O40;^zLBUDwmx|FW-=m)pL7!pX;rj%=6PF zGOww67vL-VzZdGN3}*7JUd|6S_SJU-8m7=9XH)U$bBP#U(o_Oe_#j5}}t zuKiH^$xMllG4gZy9}-UpXvd)aMJFk<=HD%OE&~5kT+bP?euCOdw`I-WQ#!~<$&Y!a z!g9+>d@oqvVd6pSW%dWIpF1Re2;_f9e4IFzCuqIeLY}%Z@Ld>?XEwxtE6d#g-cj-d zjbnQuUYC0c{2IxV63`!Xd&F@J%eh7J+z9zkir+4d^~QO5!u-0;a=bZC>h%QeCpsP; zbF&ofr(&hSCkCw7hlZQuVNiLRLjKBJaQO{S)viRws;lmC8(eOOO=gD};{b8ix z$#Oo2{c2o*uaO-R#ve6&tdYOF9LHh&i~#>Iz%?bW2KS}qvYxV7cfZE|oVaZEg??OI zw@1xWT=w`?|iZz;%6l z8*Z-euv9m_d;Qs5uLS8RxL%{H6vdn4XMy47`VOv96mPEAivd18-HYdT;q@9W#M&P(|XhO?IZEHzPc^&Fd-ps$+M;W=nDf}&r2}=E(V&=_4^?7 z)?AT3@hfGV;dp5}H*SQSAD}-P;J*g=FU8z+ZaK~Tk4Ob!{!aqDmK?8P{D1(zFTlSE z@R}w3%eh>3Y`EM5hD+7D2`-WoA&xiw_5h!mP_$e#K3lHaVV)xazD2fIjQ=#iQ)D~F z_z3~NKEO`~c#|am^%^Yu5nS#*8UN8EWsCAiS9M`ZfIk=D?PUPs{AQjb0bW)1FB~sj z+g3stHP=Jq<12W9> zuAHc#x0M4d^!wAeH0PIRR5gEZP~G2$7%rQ*8yJ@TI4{@qi2?p}fQQqImTTte5#YB5 z_=f>rtEPYcl>vS-zz5eV$|Hv$E^G|&9|OE~ZT~#;1AKpgm#O2QXJCLYGhBvbH^Gqr zPpey$-;5s>;ExCR*#IA1&p-d+0I!tcAAgnMdalHg4+r>90p7NLQGPSeq5wY_;N=?l z=eg2w*=4zbhXVZW%%VJI{Eq=XImtpp0e&vPNB8&7b1cBe4DgTN8sM`A`o}*S;NJ&$ zwL$)QMh5uH0bcnE|2%yIywa8a@mB@-ssMjKz`G9i&tH0ozh4mGQvg%>UBl&rVk15O#%KvfLEXA zpMRm@nO=zdcp$)23ySiX@i_s$GQf`-o@Fez>HMPnrY{fh!vS7rfq$NP0sd`(FIniH z=Q+dWQj;54Y*A6X>3srxet_={@IMT1~ek4a!ub9;HLxpq8t44JRIN+7yHLg z3GinOZ|r^4eY9^Z%42%(0G}7&uLby(OZ@Y%4e+-Dyxh{FJWae=_wmaBpLLUee9LA2 z{zrh1y4gSer2y}@+&_Mm;Z3~|_p#oJqIlB}1$f1k{_!nu@%K3a{%3$UzRf>RjobbG z@&I2P;BN(Z>>d93TLk#%0N)zmCjvZUwf}NA2Y6(SfBe`0-yY!S0zB(Z|NK`4_{ISL zKERu<_0RuNfLFT9KRz$O9|`bc>x%L;_h#M4*#X|<9{>2Q>;1jN{r^Y;$$`2qe^fG57< zpTBc}F9~q^uO!_mh91rF^U45!Ai#&d=AUP8fVbS^A3r9**9G_&0bYKufBvBXes_Ss z6X213{`uPk_=EsoAK)hgyvpnT%gqb$4FP^Ez)S8g%HPtPbsrxO@DgwM$4?FL&jb9D z1O9nl3-A^P{p05a_}&0de$zkCzyQBDz|RDDhqwImFADId1N_?nuX@No|HT2mEWq~# zxbwDu{#F4#HozYb@ZSQw!8`uT9U9=b8s6IbsQXC&xt=@m_-1X_s=sw z!1o4tsSo_~bPDhr0{lRL*Z$8Q^aRxbu;J{#F4#Gr+e5xZ|Y{6{qJ8GS5%( zGSA*g=J_d6=GA-3>$2cAW_nP;@Xj*NPgM-(`~xMvp5Yy7K2Z{98P4(ZB)*L}j|1Ih zo}UKDyq0s(Y!60&PZFO5ev{fTcJNF z{sZLcCFS`I{0)iMzo*lBxPF!wsQ158-zZ*RFwJLE$1}wKP6u8f1-J6OLU6^ zSA#DR-wuAC_}k!eco6yz_)ikA_ifhlH%y)Wg% z;Cf%mx4`v&j2U)xd2~C}zuVPv>fe!#fOx&X;zDrk$Lqnhyc@x0(K6~@P^}buTfa`s?^!^`OPQ9PrOAxR3 z&HEHw@6YoWxZZz>?+wQ1Efb0D|`hn~HJw}1+eFkQN>wN}p0@wR# z+zqbx<=6_Y_t|&}T<=%#F1X&W;7f45Ujh9Gmr?ye?^mGrOVfJR`xWT>>Uv*`Hjqc} zSI`Sw?^iGwT<;^H`82=Y|KVnc*ZV)*3$A~^{5-h+{qm3Cdf($xykntBm#g=Yt_H66 zg>C|__j&FMuJ>)80Iv68o(Hb?`@IER@Atb_oS!<;zqPVo+X22o{AD9gHm{&e#~}VG zi9cb)x7A>JJ_GS@N__DWUXa$C-bb+#xZX!G6I}1-*#TVd=Xo)>-Y;<&xZW>u3b@|K z@&<6dkL4P0y)WnvaJ?_+K5)I?;|Jh+Kg{pJ^?sOoVyX3}_rpw*6Hax#A7(nZ-e0s6 zxZaQSQgFS0>9yc`Kgk8)df&+V!1ey6Pk`(FOJ4=o`*t1&*ZcVW0Dd4rm=Yd}*FW7QYjG+I3$0Z2-Ss;vWKEEB+Yxlj7UK_lrLRenNaV z_&M=C;N_&82f!PPzXRS|{5|lI;wQjs&kMQJci>AT{xtY{@!!Fp7yk?VeQ_N}wZEMf zFHtJwPU?wLp0eNt1zubg@U9Y{4t}M0J@6^w4Z)X*HwS+}T<_bU<$O-O6T}}D?*{(8 zcyDk=*6UL6D&hmcn~M(tzeqd}e5Cj_;QD*b>EL%r{9N!Y;tRoF7GDDXp7;vz|A^lX z?#%bv_b%{C;v2zZ7kKfHfp?Sm?ckS-KLb8Wd^h-9@jc+Tiyr`gRQw(A*Tmlge^2}q z@E^rbg4dSyJq?~L{yTVO@mRS)ul@EK@p$ky;z{5=#mj+TC0+ykfVdu~=yDf|H-h+e z;w`|R5bq3L?{2T%F9QEu;s=3$Cq4@NjJO^L6_#_Mmw!IQzjA};E5I*Y>iON^mx(_D z-d}td_z>~E;2jrx`Hz6VxWw}l;1eXzY4GXdF{QoF6|S#%DeymKeJg_}NO>~AD~Y!P zUn%)71YaY58TbbAtHECqzXtq(_+0Qa;x~cE-sG+So#3U!H-SGc{xo>?MP8o0;NRTt z`7!XdcX<9a_(AdC!9Ng>OY%Oa?R8STJoq2tb-|0T_CDVVyn=Xl@Vest!P|(B0-q!G zGaY<|_+s$hl4mve0P#)WBgLNvzvWJEz4n4XBYq704e_tRKN9~P{44Reqa4%|BCoF~lzxUk(1K_$Kgo#h(WM zLwqlI;$7Z)9Rt_j0e=miDe=F9cM^|FiLU=X;^o07NPnvfK1kwQfj=SM9sENXSNns1 zDLxAPNAc<4uS)*K;NOd{20tUd34F;qZ~b?IUn~2mm%ttIH^EcHKLoEO{tb9T@n6B) ziN}_SZkHb7rNIY@R{vh zcq;f8;x)lfi8le)pdR%c4xE@zr0bWOrH^zWB7M~8T$5GdVUn23Vz^@Qr51uE! z6?~ld^Wf9P-vGZs{C)6M;@^NjE&dyL`;9rSX2QMSzSVQn8;_blu ziuVK`EIt5yocKuanc`Ex7mF_dzeRi{_$Kjt!1XwJ3%HK+&w%SVzYko;`J>?HWVt87 z|B~&uT)F6W*(lpZT7cIDuOr)gbMR*3oxwYa_W{@6`CI{h#r0nKMuU$Op9(%nd;$0z z@fF|;#n*u^6@M7~cJUqH_lv&*zD@iP_>1BngC7+C7W_T&-@#9aJLRL>@jLNk@Snxg zz%6O_2H>T|TZ2~>zYx5E_@&@2#fO4-79S7ZLwqLqCE_=L4;EhqK2iKW@CD+Jg0B^S z7QBbl+pFNcq(8q6K2ZD<@NwebfnO(n27IM>G5KMl?(f!%r+{x0uLl0IcqX|1{;du8 zI}+awTz_|W8MyxL?kez)B+mqJ-QH(`e=YHg!G9OO4ZOIt%X;us@yEbxh(8P7Kztu~ z3-Kf1UB$l!zghZET*c_^@gdniCV}5AUKRW|@jBqU#hZb@F5U_JP4SDs-xnVQ{*Cx( z@Lbt1=YuDU&jU{vUk08fz7hOF@vY!(#GeD#-}@a0KPK_tfnO_r27IP?u}abHHD5dh zTz}tK4P1W@nF)T2baUz`qdh34T<34ETCEf1eCq zM!W#Lg80qgY2s_a>xgdx*Z#I0T>INg;M(8b1lRudA-MLpZ@~3D^jB~_4~?x7-ClYg zS{hu>L#u%6d1wZ>o`<#s*YnUW;ClRdF}NOo4hGl#&RB3g&YTXe$C-=3^?33Ya6O*9 z2VBp;9s$?mnVsNz{`(rZp69*;uIIU*g6nzi_uzV-dlp>Jb0bxw+gHzX%Yf^7YjyA@ z(x0=y+lps{>v>{#a6PZ=2d?Ld!@)0<{FA^3h|dGp^RJu1^?Kc1;CemzVQ{^k{4}_p z$Grxw=W*|X>v`Pg;CdeSBe)*N#-&BK*PFL{uS*AbCGb5`KXt%g7jFu#=UE-V-<9~D z;Gc@;g7;b$a;IV7SBg&rA16KweBmu_n$QyP4dQFSpB3K({(<-o@YCY2fhXP?a;L-K zHN{VWcM$&xyq~yL%}rPM_bmD1N#M)GtATG6Zv_6Nct`MCR(Z?o3%*8tDENco*ML7E zJ`emw@fF|)#P0>KeVbRFt>8_?Uj%O_{uX#Q@lU}A$ae7~_%QL9>e2N-UbiFgS>n~e zmxwn4UoGAVyruN#9Pl4xd$}B3&)2R3*YmRR;Cfy*16=>UX%V=dudM{v{pLFG-=&-n zfyc>uZ3nL^z8k!n_yO=5;_rcHiGKmE=Z~kr^*r%Ua6L~fUL(5Q^*pgGxSl6g2iNn& zOmIC4RoCHQLbb>I(*KLoCS-?Sb4y_Mej?*V^H{1Et4lK*4y zH^jdMKP-L*{2TFN>CyEczS(=70$xJA8hDa;CU^z$HsDpoyMfmczZ$%q_#E&Y@nzr_ zi?0J8Aif3sD)If`W5mA%zfSyD@MYq0HKXfut$0Q7hs5iEKQ7)3e3y71@R!A}0^ch> z0sIZ|yTCQiL*V-Nk~_c;NuF21-xYrc{HXY+;Ki4F^>rFNMO^h7l21LA8+{3`H<;`f8M5PuT9 zo%k!@UBur7zexN9_#p9L!AFV5){d^{C&WvGKPO%V{5A20;Jan~=?4C>_@&@Ki;o09 zEB)#k@Q=jjfPX2z1pH_5JJ4r(>;Eu#f~?mQ;60_E=>LzS{h_b;QHUQXeggbz@gKn_ zi2nh8zj$1o==Qo(T>oDlEzeWp)gb;E@dn_piMIlOQ@jiK2jYFfzZSm&{H*vWa9g&c z$>2@J=Ye+?zX^Pu_-gRY;?ICTEaiC_T-*0e@M|UhEAXk}KY`B@kEt8oUJJxag5NA& z9$eeECb;&8=HNF-o=)J^r5<{MYd^^aFD>!Iz_t7n!7EGr67WUhw}AH)zZ-m(_*U>y z;!lI?IJ_5pki;Jb&lCR)T-*02@LweU9JrQ0QZKrFwfq&pKbJh!!L|I2!L|JD!L|H7 zz_lOt1K0Js8eH3P0{D|s&Y9pJh_3*DR(uQioictt1+MvD2461mZ-MJ^>F3}RB|ef7 zUH?Pn_`fvx7ZP6u{FHbGcvs2O617)w8-gc_w*{{(o&#P-ydQWA@nPV4J$VZFt5VK8 zz_*Ft3qDGG3;0y=UEuS@_kb@Ee;0g}_-EkviT?opuy{sRbh~VodT1Qrt-&9X_^#lO zXg!0^xx-uDVDKx&$AF)bJhQ?3Nc=+Z4&p1o&q$ti;Ke2WVQ{@pxC1;<;$H#J5dQ-F z3Gqn7=z4xYybk!BJH5EZ;Q6aPZx23KyeIgL;{CyI5zhm^Q+yKm1LD_#KQ4X~_-^qv z;BSaO2>yZi6W}MsUj+X}`~bMU#;YIwe=UpCOTNC5BK{S`*A)L5ytR0^k(W>N^bjuv zK193{_%-5n!RLuL2VW`P8T>x+KH%HLuLOTtd@T6e;xoXHi{AjQ_dUN2yrlHc4d7M9 z9|zA6e*wIi_yO=v;vaxtB>oNf0P)|zM~FL(qucQs@tWWp#20~AU+aDTEO@qfLX+tH z!^F#j4-&rs{0{Mpz%_ml_;V6J0$k&lf`1|Lw}Wf^0q|mXdFyi${7&)H;A6!90-r8k zqG@#f+$i1({7dl*z&{f20e(pQO7KbRyycAmx5V?o6UFC&r-?5E&k(;8yt(*B@V4Sl zf?p`U8@#vpLGb?KAAk=RKL=j=Zm%BfX3_P(O5&5i?+~vFey4bS@O9#?z;}sv1>Y@x z3HUzoA>c>F$ANz$J_GzK@$12V5Wf}ttoXg)5vjLr;M*krIq*&5uYhk5e+zuIze&m&AV#zFYhh_yO?_Eu-6I+&$jwZs5O4d@lGO;uFCg$uk!`MSK}}Me)19 zYl&|L&lKMU-dcPgco*^a!7ma25`3um@8CzpV_JpWNynL`;)&p^#jAopAf5@nO}s7m z^Wr_hUl$(;uKi&&xb~~*;M%WlLBBWTPHVw`k>zdz*Z!~zJVx@o4qih1eeh)Qli<2u zXTf#7O0@RMtL>ueRUQ0E$zKm#%ijiEzc0=K?=E@zgI^*(68sABso;6yi@+y}uL9Tl z+yJiixeZ+Fb2qrw=Ud=fpPzthef|JGUCQ|<_-a9!>Y za9!?1a4r9A@Oe_6o4{`rzYARJZ7cXk62B8%%fBC7^LzmQl;rsqe3$q+bUAK`Z|C1G zmB6)r>Vv-~`CEbOaaVV6J?IyA@I$iPo4`A+_txh&@INGeJ-GfZ^fB;Q z$@46DOYwc++Ac@I%Srqv;K|}Yfa~9_#I}!amo*Y!5?t4-0{B%DUmIM@*$jM+#J2?> zCEgP}UwkO|OZR)_9s|Bh;-`T>FTN0bulP#vx5V!TKO(*v{4?>V!M_%N75o?Rx557u z{{+0-25)`Of;SVlJ4Cl*8Sy0WD&keaYl+tf*YBfSfe)M&a;FQyGbPVu;MyN<1>Y|1 zxDH&)|1h|ge+T$QvfNj|2Z$d6ze@aL@Nwebg3l5E9bEsu%;^|%Cp{isEb+pQg&ft5wU^MjvZyf7+KXEPpI*&tFf&VE!4t%iWp9a2Pd_H)#RMIl=&El)U zD_P!xH-Ik{e-u1J)@#4G?q~N%J03;9$;VdeF<0EzZ?0RpY*q1My!z?!{kbIQP#V9MAh3&O`6EEuIfE zoa1k_Js)W}$LsH@CK=B0gB>q^s^J{3_hl_GoZ}yq_(g_uyw>vy!#VzjczU2|mEjy; zYpctldkpXBk^6YR;hg9DV&0pZ4Cg%8Zt{GG;hd+B$DtPt=R8Lv-Wz+t?-xG=UM0?p ze;@o}@#ElY#J>aoO#Bz{$|bz~)`i})_LC>Qm!Smk-W)(vdGIab>EH=rFFp%=taxki z{o-A~v!(O)0beUV5IkPC_dM_d@!8;Ch~EpIEdBXK@R{Q88!jo_75-XWxA#9~`})an z?hlg^y!!dgaPC*SeOcYS_c;&8H!bD8E@n8#e${Wdh5<1Z{p4>UD3+%3-n&)XZ$@i$9+XTv#Ox8L4|bNucyUY?5$=Xl+IhZ@e? z-EuEHG|F(!^FX5a#i=Z5`Q;%Mv|9*BY3|Q&z}(I z&5HZg9FIehrPHe;A_R}g2&7D*c5!Mczf{u z;yK{ivN2r-zDs-}cpcdumw{g{{-EJP?utDruG?w(ZQlC6U^w@m7O9@UY&iEr-A)f0 z&heqLUi{mJbG&Xx9~sW^<0bwx!#Q5}gWnm>@!KW-N5eT@x1)35dR$Q~hk|I*_0{8w zByc^hs0^;h6?F{nNcmpiq%<`!oXdGo>aCICTu$9@wioB_$L+F+{_&Ip{*A|>%fNpX z9|ErbkLeh2{eMiSfLD?JKMy=Zd?|QK@!P?>h~EePocJT)uZ!;hKPvtb_zCd?;HSio zf&V3b96UbkRooBYb;Qqr>;G4n)WiE6r{(s#PU35b7boNPjeU?FXle*vK|CA0ig<4$ zzvHEF9|u8vL)lJ88qWPKwVd~%v4(SbbUU49IL8l>_*sT?ylxja7|!vVBz~#k9Iw}V z?=YO>Pf7e*!`=LH{Jha{j&D<*9%$NZILE&t@jDFX_yrRGjNu%=V>3O_^g6iyUBD5; zInQay^Sn%ZA9k01GTv}5|GtXehpsi8%cA{cj^P|Xypk7RU^vHXKUrot$G=h8 zi(hFt$7?@XXE?_x8WSG{o#P& z9KTZ9_mJTnU%3A=oZ~}MpPw1d@w)%|-f)iZCh?~X=Xl+J{b@MI*Q`ztG=+P4&)UA) zKNH2dUvYmp?uCWwfY;#wn%aQ>D&EELI4{(FyhL1=dxi9?!G?1=N7nE@bhY8UUfQoF z7|!uqC4Q3O9IyRquHhW7_wSf*ILB+hy4i4!@0?B#G~Hsjn_v3X-G+1gQi)%0ILB+h zdem@^e^=tS8P4(AuU-QGQ_fQk8qRrgtJ4EbZyU~eew6r+4d?hX692j39RHid|6n-B zSE)%4G@Uk_*sow6#+~cK=H2WX#WvHCtoc~72Uk&_o@do1D&A4B6pnp7d z0RPbAP>$i;=XAOP^7pIdy^{xikN5=euf?Z7W@+N zP2yY+yk1?s@X*WP^0Tqf5%4t<|Fz*I#Q5n~aotYyWjnPl@`Bj8y%tG%iW$!RLATRn z!#Vz-#HSk0@w%PXFr4Gd)ujiTY8%e+x}7#Loa2W|d<(;M0r2d>-iwT5$^tLo7MO;Zf#Jh~k%GMu-UhTPCJ-E27LIUsrN z08hzq!$TXy`QzNaoQtQYz_0f>^d|Uc;$ImaFUC)2#kD^Skmbhq@q*OXiI-)K0; zUoQ2t*>H}xC4PtD9KTQEpD~={-`hwJH0?2*<8RM&Ikew!j!%~SM-AuruOWyiILB9&{J$B_@jpuZIm0<*NZ}smg;|=Hd77}01aL)gB zL;iFqRLO9T*YB_E7|!vrO*lFfs&6>QPnG;F4d?hPBtF}4jxUh-Zs3c>F9lyEK17_i z3-13v(m$T&LHvggdcF+&6Y;wsPZuvdv=Mx__zU2rxBxUA0Us~^so@D;sQdVXIJXzq z!y~eto;957?HQ@JzYOR2tx^vqE~XbWX}kB6FBD4|&ha{)S2UdSpOW~hhI9N=l0U<6 zjvv;H9%#xkoa3LD_-ycd#Jd^Jc@9gSo`!RtHzYpSaE^~_P7gE4+CR@od~w4$zMjOF6X$l}`kzbxc&Z2S>9YMc2X7|c5nS(k*~`eEv8qvhI8ok5Yb*ZUUcg7=m9;ous74ft4zp96la`1RnL=N9lACH@}pTg5klZxMeI zT<`DtBDmh)^$l>nkL59NE$0{DkI8bs2iNla4zBkNvoH7BQQKv=seMS^f9=cK8LJ+?qWh3Kh}F0Y6Ct&d$}bHG7`&AFN$mbOqG7J7hLa;_b#~J*X}d$&!wOL0IvP~EV$lJuUM{EI4#dFk|!Db z5Aihcu=Lvo;M$*CfmfIKF5tt&`-1C!?F#T|55kuI-WruI*AE zT-&83xE{A$0DfG`(+6CCuR93*Yl$BTep);q{G9l8;PxhO{a1p&Eb(`OKYx!GzY+Wn ziGLD&o5b%1zgyxDg0GhN55OOg_^-j2O8hV2TO{5Z;FVXm-|gaw;LnOz0WU7~lL4;% zqy@P4lg{AUPc8!2eligJDp~Fb@X_Lvz_lIcg6nbS67YPwa?=_&~|C2mEUBcfrSse+52W{Ach2@$ePV?YK<56!<;j8Q|}Vw*=SY zt}ftTOZ>&)8b1pBPl=xbuKl3^T>HZ^aP1Fkz`H!`t^Why`gh!qgI^}`&w*>d+6UfW z;tzw57XJ)-{?N!1ewflfd;pA=iPYOF3@>*ZXO#0oVI!JP5A$(|8hmo#fvQuKn!*xc0aAz_q`9 z0sgk+KLxJicI@Ejc6?UiOM>hEw*vSMiLVW=_vL5?epKQ+f$RGA2G{i+0Iuts2OhuK zTc2yeb$u6r|3Botd3;pm^}u~+vXBi3ixP1g6eKQWVKXjh0z`v?hE3x-nIw}%vWznm z3|cjA2(F;5pg*l>)ne5aTPtW?qN3s+ms(tEqqT}wEw$DkuDs_w&p9(ECo{qwe(&e~ z`7{&RD;+%(f z6z4pAtT^Z4KZ;k7{q2f#9){KSulIvVezfBJ-i+~z^K;o#6hDUS%ut;B+Y=S%^WxJK z=kwxb;&__BJN)yoxYo|)zyvRCjHUDXiv>R#_!D$}W2xXM&w0L1aFoAeCX8UXq1H^y zb!L?3{NFA(%JXwIcL|R2*&AR4!|!X&BzC>pUuBmc6ddLG_~%K%(f-ooUu4y9|&Fnsw+HJ|DS@R{aV^jf2H^%#D7qHB=sXh1E358<{#}lUL3*wFM^}} z-Dv+YM)6b0&LrX)gnR|)S5rJ;!7-kPDF5dvzS}JH z3is72-cI~##nY)?{zvhdbF7^^6hHn1%kNV>oi3<7s5svb^tj?HgVxTAf>!`qN9Fyy z;8@;a6wiN&dw^k{2c^LXhRixU#d<{fV`kgsk;GX(O7aH@`3ey2Bfm!oj&=^FIA$t3$9O^%&roXbT#r#ISApWcCO(ch$5WMS!f~c5`MW7^GnM=Xl0Q}P-Kk%_ zP}spZ*QHzg%LK=~J#?JqD;4(~Z~0Avqn$povsUr^3@d-X;AnpY^-E6?=kiYQTKPAW zd=>fqK*`@o^4|)1jHjIZrcwXI`Cmc(bDrYk>3*!;6#q70 zKT7eph#xCB#=kDZ`kgH}=56I%%NHun{Y9PNXvaLX0h2|7qn$I!&iTYWz;Hh@B?Cq< zT%+W#r~KTk-zz>R-`aUf*_lA~)SE>9eI;K<+tufSW4TH)t^My54-rqNADFn_ z*U^0~yA$W~W|I7PCI1h~&lDy9Gm@VpuT=7X zr}%GF^797SJggJ)7*9U&Cl#+I{(|5bPhg?7^H*h`pO^na$=^Wx+3%J7sae*}h$cJ5 z{9`=bz z?EFIUGlp9EyA(f{`2C81LdQ9;D84)1+yTQUil0gRE5(07Jfqp_aenTiAJxYzo;A|S z9jE~0kREjY^adE8Zkqx`cZ zzd~@7=kvIm1xNV~%GVmfQGPU?XWc6}%D+$Y>jX!6zTff@!BPG%)bI2Nj`Dn-_@dw_ z&*khD9OVlso_7UD`Q2Jz1Vf+TC_kO#KNB3~Uncpjf}=d2hkh?O$``f52nW*R`Z|&9 z=LwGT0g}%b9PRV-`#!;Od*3<;Mlc*GINDitmchSacuwC z4xhB*PMwnff$WEr{E^fTT&noh#8)f6iTH06Kiq2_KdSf=;=PJLO8f)C_omo!vXwa3 zi=Vcm?*+$v{+jEN%E$7tdK4Vxw{krSJ{>r3M|%m5@`ts-2nL_vD9_tP5phfl#$QVL zsT6!4;5^J%b~>qCe!<7uaP-UN>JS{|zasgF;Idp73XbxP?J$Dj62WD;RuaeJ zVEkX8Fbr!2-`65Deo)!DlFId@;OKWV`F%!kS+3UvNBJ=w*2$ZK%W{1nILep;EEmS_rTWUH?I{Ns%Ab5Mj9@5G{5;}g73cOdRq^d4f3)KKywz;Q18a<1=M=>+ zCOeIa^LHyEivNz}FH-zQ;#VmCudA)!Rf-=#@!X;Kp2Y80d?fM56o33@*8U5M^ZQpf zD}D{d`47eU{^2hb=lg`WD}Ei>$!oR#xqkV*d3z|%@5eht@lVLk6vg@Z^y!K}O7bTv z{vPob#WxZUEB-L$?Lx)*I`dVE^L-9C5y$53vqd-KwMzar+D;!39Jix)X*=2=IBpkw ze6mq+l;87gW8T>$xZFGBaKA3B>CK zA4d!)XDj=Ep?EG-d;`UEwc;GlO~U>G!v0z%|8KJYpyH2_{f&yV{Wp|-F7GzQxx9PO zc8~cPFX9V+BWfj(@)3DE|Y=pDZ}a zZ=^ib3y$)~EQS#bO@gER^CTY;9ObVi`EvwE`BzE)62Vb^Gs#~rILh;R)+)vMxbfGD zZzlVH5FG7KJ_klHtQQ>Ze@OCA36AnVBl%|qNBPwc!3c)e1xNWYT?RXU5gg^Y-}{(2 zw}}NlNu1l~7;2xl2#)1l zu*53eCODS&p!+PpPjHl9NAmXzj`Bq$|ES<7e>LUv3BghR?X@t1;bq17IsLZ~1v z8gb`6!O_mIs2)ER9OaKD`7Z=V`P(SYZv{vBFvEf#in>j`DmQ zGFotypMD;UVAw}+l;`_=4iX&Ymyvvt;3$75mG^MLQT}C;KT2?v=jWtm6USzQ?W7F; zaX3Tqr!00tif2)KyGHRY;&%yt2-(2N1H`!<9!Bl3M{tZkkB;j$3Xbt}JM0x4<(o;xP#lnMI@gtILdQ-$QK;# zkG}v$FpLx&<+(lh1V{Nck{>HL%JX(qA~?!_LGqIYM|r;AyIgRTpL`*VV3;X5%Jco? z^N3@0WBq;%|2VWOUh1{{D#3YQife9C_UBT2xJz)1XJ|J{!}~A<$9T9sJSaHI*L1@O zhKB`5d2SES2#)eiRNm(WM|sZwn}VbKZQU?};cdZDp6mA`!7G5T$wFy(kCxzQ=Z$Wp z@cv!F(N64sJi$?Z^hGG`INJqB`9DxUFqDp?v0gCG*TX*!lN7(*V&`PV?EB8$xUPr?qC>wGHLM#Y~Y{*vNDFSf?sRD3$|zbSqN@lT0k zco+{I4mgA8xE^`2HEqVb5$E!@Q2QJsIL6;g_Qwf69XPkoQo&LFkV}ktXNuq`&+W59 zaFkz0@|A+4Jm1ehS8$YnndBD=j`G}|1A?Qx?@}1S5ELBcxj#8uaFky{@|}XCJokqe z36Am~lKf?YqdZ@KUMV=rUqS~!zYrYd`MHBTiF1A7J`9Iv75|0B&fgV33l(AbPVf?o z%y>wrUEu!wL5gRT;@gS)6t7xp^$%41JmM1-e}ecl;us#rv&@=tP8GbA7*5)hoqt|# zS1wlkSTb~>;=dxkO!5CxJS!ESM)q$~{5ImhQoL}vjpts)+lj9yj^)L2t+L|I>xw^1 z{9lUiOZ7OM&NFavBFW-p9C5D42gq-c;y(~SRPkf3u*S+2UqXDA;*S%br}#-%T05sH z{&V6Dia$sEY~oz5pf%%MuQ(mXI`;@ZiDYr|kg$*2(M5l>E1wn|x4ZnSEPqaLl;?iz z&w``;-$?!~!BL+3v5yqzUwHAdXY6ddKb{~0bg z+W#-f?=CpXbAPy>;3yxs7Dg}}AUMkN{(Yk0DE}vtpDH-YbN@MAaFjoB1&m-gMsSqp zy#>Q2acSe@yW$#Q#hj^NjHfr-t=`;@lp-P@L=i zTgCal^h`ScWBZ)X;fiy;?5p@xisul;Ii51bIi8t{^L^vhinHI-73Vlx6hDFDS*$q6 zbFtza&ozoSlAW6rXTNtTKL58^yKp^K@zaPura0dp{=DK`-ggy0n(X{TasFNAOT`0g zOgPSV#rb!cJi1Q6_0I26*+cPjC=UlHei89WihoS~WVzy(k^CIR`S+kx73bfB+7vIO zJe;FA|E_VV;y)+9*C~E8@%t1XO!n6+&cADHRD3=48?P$P-&_AsalXFsZ^ijM_eaI= zqBwKudIr}QZ@&eK^YPd?#d-Uhs5rMnz8=H&`8mYdN}l`w(-i+V#TitbpF`*CH*BAu zL%&eTKYP1vw^u37&!OL_I6qH!m*V{V-5(U^=g@mJztj4CNpXG-{cXkhIrNVezlZYR zq3bKjZ=WDFuuaKQm#rgYRM=SmS$yX`P&k3HScn7urdd0c_>``NIWAdCv1Of}{Lml0Qyxlz)ceJV|hr|C;1a z6&&SXBKbzaQU0JCUu7h%W`zy&0Reb*&t=|I0?;y_K`(-=MO;-LOCEq}NlH$K5&i6sEov(-=C*(2y z5XC=VaLn7O|6~20uK0N3LB-b)Z&&;y;^!!S$j#P%x8iRSU#|GbTde$bil0gRR^lEI z!+zNz{+Z$z5g$g^kJ-*|$j)Ahe@dLMXS4i*3~T>*C4U+54#l?+zlAu~ z7j9q6Xn*k=#rb)|2Nmb-@hQbulbv40`TX=<#re2*i{kvA=dTq16WQk%8*=>o-sZdu zZ9bUu@16yUbALEa@fXSdM8!G&qZH@(k5ioEKS^IG5{s z;@D26T2V8;P06pP{pNjw9}SX^-(!{T7aZFO?@u2U9Ob{Em%!3c&xx0%H3XOR6i!BPG_ zl0RE;v_FL8&leo!A6p9}7%u8IlbC(pF0K|F&Og8ihTFQ$ zBxaxQXSh#rl>ZIM-!C}Y=lc^L6&&TW9)uALPjs6}%s!vbz9cxxr?0niuL_R#BXqs@ zuY#lehz&4;;r(tiiP`7-%03qykexnY8%{f{XBdkc>8FFt4G#|Vz{pOgFq#pe*8M%)9k*pFRi%{V6rd9?om!_c>X0g+R4X?gJGNCXlKcz20Pgo+bN2nd^yPv5gg^8Ao<~f zPY2HV*++1cKkP9W!LXm;DE|P(UnDrnpY=FO!*2?Lqde!6e{b{v!+egRkO?h#5r%p6pxpF&%{Nv zbJY{p&M3h#{%-Q?6CC9qC;0;vAM~WPGg0xwi62Rv1e$N#g%XJEs>jJ^iFW1X8f}@>$^1DiKv~wTDzee%*iQldG z$frOFhV_D@{c^J3BRJYWmgJvP{959#DgGq!cNEW}{`?=rJzyKRyElfy2!=0}{4pf| zwcxT|yq8)%w(~>2T^>rD+uM0$XN2HrhwE#+;FyOMl!p?*F%O;|7{M@8aFp*M`8k54 z{1H#1G@Q37o<+P)aI~|P>@*3Eb}k|LMS^4e+)th(ILiO>85qHEp5Q3Y{oa*=qhH@( zly;n-3yyZaBfqyOeiGULwcu!{n(W*wINCXdegIx4IL5>6{1L%X{t1%r5gg^YpXnv; z0fz18<~?8p!zV%>?bL5F*x4>P#<`B-9Cn#q&+Wu{-Y)MeILh~te4*fI{|2&Os`z`v z4_AB`9iPll{1oDIh;z9<8g1h_Rmra+`7;H_{BVDDma=o|Ue?YzN}k*QQo*sjz9Clr zO2M(bB~-3!1()@BtKeuSM0VB+j&>$dp6^$@iTLA!qn$NmXOrM)=YL54RmJ~K{B6Z| ze*u(W_`Bj~691ey=l{ojt^Bu2{$`T@QE-|6oTXNe?Hn@3E{`If1B)2{t7Kf_w zir3P1`ZL8JCw{r&o%>k(cPf50@kbS}p?3JL;(sCjwc=;(Z|(27%uYEEFA^_T{MTcx z+&tn~eb^2^`K{$=D*iR`X2l!n_lT(Cxxce^x)tAz_*IIJBF^_WaXfnyzgNk#-wldS zAo-^iFD3r6;(Q(Q9mQvm{D+FO{J#~iA^9H_XZhUaHXmHB5XtYMIG1aj;+)S?#W|nT z6u+A6&r+PPGn}UQ?)TgHf{M?k-?PGsuO#~yDt-^~s}z5V_>GFcPy8;$w-f(^;``F| zx*o+(BmR=&Hxhqa@pp-TruZuIn{`G1`dUZar}zuR`Mxu*-%p62t>m-G?<&QQCjPAA zhZ28H@d?B~Q2b)zW3KEUe*^Iuia$*}sQ3fK+ZDf^_=SppN&Irf52ALpQgLqQwnT3FIs-2;J6=Wzg2>x{BKBpw%{oLFS?F#y5M;H=^F|o z7=nVMowSz>cEWiQND-dR|<~u7rY817;aMh9kTOl!A+d`R(_q} zXy<;i^N`}lzij27RQz$`FDU-xYgT@<;OMuT{Qg7nb;Q3A9OEf|#oGB_#g`CwuCeQL zV1n{X$?ssn(XaUk8%%Z=9Oa)NJN#WWwv*e7O7QHMl0S~@mnuG=zX*_CKU{^{(Qh$nWQZqn)i}=WD^y&W)7kv}<7j1`Gr9 zycri@*f$BEMjY!G?UxTnX}CXGaJ2s=**{V7GK&9nWj_-GfMJQ^S5f|NQT$db?mVpc zdb0CZ#Xl$hO%gt8g*C|K3Q@Uyf@8TFs2&eg{5Qm>5=VEK&pj#r`HJ61oWC!`@)g8y zQt}&Zc+S0w-$&(oO!2pf_bUD~vj4H-`=nV1-w?+|{~YHdf}{L*B;O-A%5$7A3Xbwu{1rwp^a_sh{5?4S zo)y+F%Ku36eMtH1ep9zlgrSBQ+Y!w{se@**$hxB;+S~J|rXA6#YD*kNwaK&#T zzOUdFAlgTE4pBURgtaq8aJ1h?c8*f~fH$rD@x-|vxh`uJpKZmRixeO1wJUz9crD34 zOq}yjO>sV}_zL2^f@A!bQk-uozLoe#f@6Mq$+O1O55s83 zkfV6PTUKtA;OIAhq~&83FDE`(aEzyo>`xaQ?Sx4Fc)?MA0r_2^_Nh46XFCfi z{@Fqv^Z5g+jjyPoB5CVnt+&gaRL&$1-)CkgoqFu86wYu7J0 z#vh^nxmj?O?<4s(!BPGN^1E2^yU5OE#5w-IQ2f7Ee47o&c}Vf&Nq(c^=M#Tl@doNw ze;|(e!FCc@ZyjXZV5iKd6CbAdam4pld@k_=6~EvPYj=v`{Qk5G#q-a%@^cjb_%_Q= zQG7Ys4=T?0qlOi~mf}2D@ukFzD{$bS`I{*aabLGd4Mw>*25opSxoC;8nJUqpOA#mk8wr1%$9uEQ1o5Aj)wJ7lLu z@m%6fitk1|qWC!C-HP*bsVfwpLh`pOUQ7IL#W@f6E6(M8LUDdC(@TnXk^OfSzl8W_ zigWz@+yK`X$G^ww{`Gk6!*+R$;s+6*pm-Va!xXO|Ua2_WcQ;pYF7FwNcaxnK#jhZ~ zSn;!oU!eFr;#Vks8u1$x=j(L0E8a}ZjG#V;matvKyAof^gaXt`GL&uF<>agINvILF_m_(xQ(6@nug zN&B7EieF6fYZU*O_*%sask}XcBjWnnq&U}Cuj06G!(p?XnCmlW=U9q!tKiu%Ur)>1 z6u*U*jRBZPb(Cj+{C+0pe<%5T^27X}#0wPvhIonKxxnaWVuz1+a5eIqNxodk|CV@_ z;vW*P6?_D+3gXR*FC-pP{59hI-YHy-cDNm`5c0bNpGESk6`x0ZjpF?N=e3I0)ABmS zOY^Lu4T=vLYuk-6KSucq zDbC+f>Qekx?4)7nR{UP#%M|DSc7@`fp&WU8gw5vqAA2$ZwD09M2}je@F6t zit~4xwkUqjFdOGq#UCKPP4S0`^Y@y#y>Y!1kbmY5<=?0H6N9YZLd8EJUZQwCZAWE_ zpEAVSDOdb-;#G>*4Yl&siVq%Xd5z)+5)UcP-*4(t+)IAD70)2PO!1?MuTZ>-_-e(E zC%#T`&hrMvx!>zid>ig$VA!PiYj{8iL$Bh0Ccatm18Mv1Q@n%nyhZUS@vVwSXuH^^ z_+7*u+Mjc~`YrJ+#s5J(U-4$D#{$JKCGJyvHSt2lA0l3^IDb#7O7SNsZ`F!FPrOEP z&VNX8zF)3O@wK?qhM`;WdxYP^I|V zOj}>oir+)LM)CKF*D8KBZAZux5n-u5r_A1Wh-K;p5w@+~{?-s?mybjd^*E`3brTD9)pRf4a z#0wPvEAbM=`FmAmigWuZSDf2VmEzofsukz@s!^QlE2KEb)1~;$wA`)uowU46agKkD z;`}`AM^Hz>}>6+MdcarGv}$5DIkQ=H@3qIj76ZdLp|;@cFzfOtMl zxm^6ctpdfDX4(G1r}%Q>g^GViyhL#>SDE4`P9lil2@GFyt%F=hX#@M@YUza3AP*q7fL%6zAi{a>Yx?PL<+Q ziPtKgO}trgwi8mE?Q|)=lI(OVK8^Oj%M^c>_!_|{KsgIdY2m%Kiu2{Vb&7vV@*5QY zl6bG+lYzAm->mrc#QPNgk;=72@m7l8T=W556hr%LCyUx0^YvsuU-4_m4u8Ln<@x+4 z_8u3q&vwd`9sd2UT=DDaxV%d7e-f`&{0Q2w)hPbI#6ya+-!8?u{d6nNewQhJG#&q~ zQ2cn}s};YR_&UL-LXLi*`r4p)Cdv0Ge)L#dF`E=Wo_L?){66h1il0vPxK;5e@okD< zPn@5_#;`H|^;9nfbe_Tduf%H#{3_zzivN!IGR1#Sd`%L*R`Kc7KG!ME$ITlQ=koR_&gI>tIG49iagK9~ z;vCOb#T#kAvQ2Sw(G;5^owsp5|494&EX6r~pW+-(q2j%i&l1J6DQ{(pbNuCse@^l9 zc`e6TN&REBl0T8!eU0Kb(e;p8#ksuAioZ>H=vI6ZEiY5Nm6lg1ehw|KR-B(JU!yq3 zvsQ7Ar$=$l^CrbP&%KI2N_pF?coF5TPw_ud-nJ;t?PsgvUfQm=DbDSOpGW6<}FZR6RZ_*=xcD*it4ZHn`A?hf@&Twh$?EXDcxR(?*M<@2dt3Y9$9V~OJP zDF0=O-$A@w@$V@=e4U>CPNe)-EBQYVuTlIR;vvO3{w~G$qjGgCe$>9yeiUybzD9Aj zvsQ7=&pO2)Av+rs|2Od-#lIoGNpXITzE^S1&t}CrKU)sGsI~nMFKH z@!7=rc_x%Ega3&(olc>UM}7_Q62)&NUZ(g{bbMZ}_-n+g6zBW=YZd2snia1kzahm> zBi^Mr$KS0u|4y__aeiK7h2qCj{Hqnei1-@Cxx8x?=koR_&gI>tIG49qaW3y>#kstF zidSMq!>~nhF7H;wtEpVu6zB3fbRC`B50^JfaW1b3RGi~4 zQJmv1Q=H?kR-E%+qxd4b**Ud}b3Dz8b3EOO^Y=2ADSji>;|j%ZBfeU3&d)l#J6r?bj%N9reTf{2!M$n|PO!A4j}f@!N?nQ~VFa*9d+% z#9l)2uT`9{Tdq@_pTF3k_|4P~dlcvAk~S&M_tp0)ekjGWMRAN3hpmbqWwEnO@#)0# z={yg^LmOKTLKuDE=t%9>xDge3Rl^iT5ea_O~d`_O~j|_O~hi8QIUr zo04I`MJke6E>N6*zw-&6W+d&XQ1O)+mX`=lmzd3pGR03L`EtPt8Tl&3`8c6kaJt3A z$k!Edfe^2=d2~L;njeM8lStQ>rIQ;}<8YgfsYf)@+9%szFBd;ei9O#+c>IqDbB|mKC+3c<^HrwaJk>?6Bwb2TrIflZ}~nHl=s0u4?RMDEJK*~ z2|iA6hbk5A$o|kLxa{}%zF(A={ade)m;G2F{Vt92vcIYoT=q-L1eg6!pWyxa8ESlJ zU-l<_Um|kZZ>$jVvVY+F@lam&1Lf3+k<0C!?;k^62LC+p{aVQ7_InDo2i$DrcKS8d z3v#)gj-oh`lPb(P&KDF9a#A(?P}+EqQ&kv#uHa7!3WOs;3?Q^9!OCzD*2C&( zxYY=#up+^MI!(c-KNJqsH~SmI!LvIW8xskEzhETV(iVsY{cV9RKgeKlA_Kz1z$ggF zR%xk~3Ux*!wwUM*%Gl^{?`*?$!Iq|GSf>*l2!(>}4dA9e+S1YP2UEfJ2+Xl$xT7Hu z4cN-qk*v))R7O(})a_Cv8Xn*iLdWRXXG?oyhd-1+j{JoK4J{oo?{5wU8iHY4JX<@# z`cSyV-`qg3uCt}J!5@dBA#twA=_I3+e0}K-)|Z&|et)zzV#*R|fEaXcp`6ehRY?;` zHMWQq%$SG>?hz5&}Jz?R5NHkCn%kgbL46PqFySBQ{ zMt?&P);7ah+Y;O7ch=1agu^Yt@cdAqzNNh>zN*@6U5Nw+^eTZUTE+J62Pd|FD1z-W z7(>vq+M}?>L}jzw+R`2*5X7xG&=zzsROp979gyLUP{bb%)U^hw@L-O_O^+r^g|3`X zFzj!w?|^=UCM^wC6VlWI+g*_BY!-3Oaj>GR-b$X^7HDnlsP7*pEc^Y&TcEv#1feko zLM=rs*{_RjX>W=87tiTrcMWwiZ0?AS6g3l+sEb63LO-oy5-L>UHEfKU(Ak3N1`>Fd zT?MX&9tCm?(6I(hK2OR&gvrn8}G24IQF~`iWT;N|&F@1KWe?XZA zH0Q%W#I~~fNVIIn@>8XJDK7PIX9FBe*|ErEX%iQAU~(#lJtWTkXFgiT~b-w*2dae>^qT<$p4Xf4<+3f6qwf|IsA=yC+-! zn@JJNkLQot{}2#MRR1M(68Ahirl~G}Hs~j+|C%Y*{|eGW|9C#C{bxhNP2}I9lSTf$ zh0F}7|8&q#75FJ`~P2HiTsz0wu;N`BsSLm zzl1f3{O2EG{nwHv`ri}&wSONtPvpOc{PXX9WM;tjzb7as@*g7q-Dn&J^pDqvwExpV zIg$UZbTKLR`ym>EL6`qz&`;!l>yftnvi|XUllH$PiT`|Yoys_-k@nvN!6%B}NBaEx zB-_yXb)cLm{!P?=fBZEY=-@Yk#x~VUb{j8G8dD@`$7}>@2w#J zXdDLgKNkMA{}~{LA_Ih)ynHBgi$?-&&AK$-`$p5kg{tp5p z+CM($mZ2YX8?J@n1g8mbl+FOF-IxM-u&R(#JL@2d#f%68&|gzfdZ}yw?9EutfEjf0R|^ z-^%%&K_`a1y{>zWHiv0UKnHdoOk|gb?mR_VF{ZC2Y z|2FbZ)y!_37t8JJ$QZFRSXMdQoWy_iEL;9A62|glm!QjkKXhDJemdMHY4{zm+|HK7 zh@Ij5^E89v*ZTPtR$j-;%RD`e^mYH~BYnP~fx}?GynIrU@^7N@ZzVx2KVHh$KoN6U&H^+o zIDVjiY|`5Q#w7lImDW(~{tdFL^Z$4f|6Sx?wm+;=?f?2D{?{C19bQF#d7}Malf?hl z1m(vn)&A>~_%AuudgS{{lKDR~iT~=^HvgMRu^FbAQtdwo0JlFd({Bh>*~JI@(SiME zE$Anz|H3%~>mQ4x{SQmxzhstm%=f==7&`xXN&GJ(|0_tb8K!7b`#%f9OjQ2zOArD-xBzYp(Sl66HTJf&a~*oXCIoV(XFbH%jLJbz{`gJ;cD~c#7}E!Fk>OZob+oi{alXRf$;h>+W{cKujYow2ECTIpTr@}w`Eg-YF zO(*idw$)O+z9|PSi(U&oL4$0zc? zPp+-$6h{GqJKa9YyU5h{}L+}8~=8HYH5FpAv44Nc^UzV z^8@tXv-%bN)njF4{m+x+|6io9)MNV0?}lQ6E$-$RJ6lP=T;7}nYq|U^cn9bw%3t?0 zHh*hvHJbDP2BFW@g73fOvan5@mf(d=7}gzWCb5y0y&m+@Q+Z6n&J;e66z(4u{u^PL z<7fW|!}d!xW#oC(H_j>+;ze&5(CGS+nVqZ6xv+Bf zF}j;gt_Q_7bCDkxtWy1wJ?uk-Ua*=t$@kGijyl&s#q|;a``hA%U@ak=ZfWD zRb8F&&Gzlvt75IN%JWqD&xtF^eW_yTgKs?jP5YA@|Gvccga?*h zF>_v+d)dsTZTw(KX%CL7vS57d6EK>T_4GIIJn{55p-o>r{mnnk%tAYJLC?~@(<)A{ zIJ3fk##2>~v&SmW->M#qFT7XvaD3tIs)u-?v}gNBNk&4jiP9c^>eK8$XzZi{+VPHf8r> zf-2JiKRejzhL1EZugsjayvVfYs!KLzVWT-?hs`F|QXakyT$|>y;Rk5!|9m9Hwr1*Q zes$II7r06u1;b{j@;qI2<&dH4kIAp{Y^qxBt$56AR+l|D^wOV$z|aS?y5Ik?`m>(!Q!IbB3<(Sw16c=z|rR%V*@nWY8sj z7cQSMa_IVs%qO-CT|T2==Fs&^()%~(?F%xTnajUf`U$q^NwF6FT*4OpCA8=nX)~cY znp_Up{Qebh+Etz};!V5C^Qmmw+ZPPBcb?$gb{%+!9Ne^mH=6mTP4k_waQ5tRMI{lZ zp|h>c-k1mX??}mUk;BI|oE8j+&+r`+XleCDJACHm4fy@v7i|vuB5+Sn(AU@z_628D z&zt3I4mJdW;W0VZr@p}p>eURUHefWKW)7yQ$63g;uM9 zJi97p`*fbYMc7_&D=)D}k8^s=56$e@-CTBebIjdIJj)KSD036IJITGfdF<|gV($Dr zE8WdY;0_Of`VBiST@Aa#3ynBY55-(a?%1}A8o+xY zaNr{ZNF2}d8RJgWBX=1uT4PZ43wd@jcHJ=8dgLX3oEQXo_SSxaRw+K#MP-kCk2l24 zvqfac>=uJqa4RpdM-YrVvU59jH<#TV5_5Mt&$0tsk-QXl#|t&2I zeN2{SlBuv`uTyfX_KfWRD?6~^>u`3WFW^LQso-d3pp_kN;+)3JSfy066@J&nPISCE zq@5SHvZG|~O`;sW*O|P-3fPB?uB0h++dMmh%;9#wYd24jWMO>3Z` zxrq$L;0_Iqi4|=g&&D^g`8@kBN!hNJmpF7dV2Jsl867uWj&$ybx%2bv-Gl}^VR=-- z_~n?!JoY=7a<4QS!}G6Hsq+>Tp)vRHaGVun9WKDVO&6MxUaMj*6anBF>>%y zM(*yQnKs0(${T9T3?AW$i^C@w(}q~jWuQHDlvtNP!oybK3ymz6n>#o+FBgS}7dgW` z!!yeZR!!f-`WU~*tPw}=0XG*Gff;m)zz3ouGe92!mSeZcVqy0pNC+7zg_WZ+9PcQc zDVR(%d+hBg9f2}6xu@iw48}%-NCArM2_j}@ujLneoa?6-41>zsTNvaZFs6M_D;~tY z6k-O4=%WxbFvKyj9Azx?KqB{xl|KVZzJGiXRwEfZ7;*~*G^@vrvWbJs?FUc}VRn36 zDW1c^SOtN^fpM?!k@eU@t_k5_@?cVb2zda{6O3F2CfCRn#oXXB##U_F5!f%;%`+Y{ zQJP`e!Nhn5rb4}7HBF+LF*%qlEAi+(aQ&17xwSPu6{{_t-9xeR;)`Wig$qY<1s;~+ z>@^fC@NiMJ8CbPP?Cr$r+JGaWW<6B1)2@J8_7<$14x7kP@!)J|M^AS48XWiNH00ZB z$*_UY7Ty0@+y0xS_h?x59EUeh+ac|En5Lf$qhU@49^AmCWf*w|;UsI2w*w~qUUFfYaZAg%Gmb)K|zv3S2H zo!(Ahgn#cbh7LzV@V-H_@E=^*fL8x#miI%e>%nav6eY`(%b&4J zADzqDOFJkRE#r{UZX)-3R~nlqqs`TD$<%wjSvJA^Ld1E4XOPDeFU2bOEx=>L!`Ci) zZ${M{jjD+qFVo~YInJm^1h@g$xJ@JuVuoWnC0!whUlj&n87;Oq4Fc#_hDYjD;xckpOW^~*53r>FWY zBzt-0<4PRFtP_i6HLUQQd@~f)#BvAE{ElZHh8g4eX_y)4ur7DBXTEhfpB(y)H{&oi z8-KzalTL~2+Q(xKBRpMrFY!K}1*quh!gQLvdCol<(mBxQ1x2Gh3(%*D%Xqayp!21$4JtDf@xaPDd78M0sVnEP^_!@x=Q8y;tWT=Q34^PVRw%gANI zk51X2c=F8xR$}(2a^Wk_@c5csN67YzwVW6%%`afxv#0bOrA?gPDJ&4NkL zLEggn!Xe&+#^Q5Q*~Q*N#%00Stim@!WY6(BKuSdM;X^@Y^=`0jWgiWZWo1wFj>X5k zvL}IXI*iAb;?iW3p2=3#IGsYOW?`zAmP}HymosL~(h+dihFRJNYqp#OFGs7#8IRLN zKr^J(ncj4xXk1i!GlkLF;KDANm2T<#rXe2EVs_ z?2th)bC$OX@^Y39!!(~oP+JG$sx}j0o2@Ogs@hGnnv7=NZ7 zSJSp@n)8hwTQz3k7EeYz##=p^u>FJ8gV01z&O7DMi8;>cuoKOB*E#qCSd;Uf?~tsV z_YB9NbN*)c1L!}ek9KBe#Rv8a3(ctf_Y$Lkd!n2V%gj7>TRHzY(#&IwIUiYPX8z-u zasH|Ol7iv?oE_(%RhxNZ^NR&$emna5y2i}!h4#1A#^t|lHuGm8|1K2g-*=n&*OC9Q z%t?zKm5g@s+Q48&7)Iu(peolE13%4`JIR(CJHXs2zJqTiiPi^XPNoo>sWpL4qj>q->4 z-I{sX%x5`yD`3WCry%DBBXtL^Sq0xE%vlxJT1BPD?K)?5mRW(R%egV%$wRxwM1GDv z#`y|O{LwnP1h$u)KZ2ugSgI`NDWg9a*K9;b8_lxO+9(}8Z5^5B_)LD>>9Yk^0aBi` z$!F%9(AaZ@X5Pp@U*hE9H=c6Ofe{Wl50{jpi&9+eIqRYd#%^*98G6;w>RG@e4Z?3-{#GG1?EePNozL^>%?rx+4femLDiXQcL4MFz>Nb- zxXb2wv^mM}`G(v1d6_1}ea(vhW}uMAM+@a}9OUFx!Z-tW^pg>LrW+A+9Ojvh-GZB0 zd+bq(?+LQAGtrupcQ*i&o4g_0Y*&PQ$T!p#nT2mXHfv_#JL;Fr!uOuc{V+C+X2_2o zn?kd&-IE<(<9Ku83m$K-GX<4!zzeT*;Is-ilBpI0T!k5oFRn(bNf&SIzg8{YgtsXk z8nb*09)QIcZ^pVT`2!vlgrHSo>dGCUr}!E@jKM)v>J!(w?bd}RC(d75W#TK;VwxfbpW!l2HuNA;dF zFnzW)oq_dAv#-K-W*dv&yk9EsO#r3~NFRET*#=Q>=)txNF!P7lb0af9!5fz;N{iPy zUMHhEf2n_+zl3`6N`AS26LVNI8P8`bcoWN*&m2K)H zrBegHI!xcobCR`+rz5dhClA|MUJgWQat7BMjB^Zi=tP^de}Uf6Nw%9ee6sBeG0{V( zn$!4U7DNV6nN+rMMy705KgIYatd92L`cU$MC3BgQZZhx1MMd~m zA6^oQb`*EiM}zPNqb}EJ5HanlMHA^x2e8wERL^+#R7=y&Yq^!TdB#>A473)vwAZ(G zHUxLxUCN66{ld$WI=fQ$o}zmH7`n=)rXE2`%5ndT76-yjE;eRNyIY;Ow@`iZ{%pWT zjILZM#Qk84vi*kp2IW?-pI6uJc3vUw2lhh2wjjKA5IYc@X{mQvgS%!SK_ok046N0d z`<+*d`?MW!LvZoVE2Ga8)Z#wzm2d9cxziAy>`U8RI&-TO_Xn?&bJ53RBHd{SPxYPd zN)>jaVExdc2Jd4VLV-Z)duW&1$s;JP4+Pp8A$L1p{zL^y!A!!KS^|q*G-efvJLSaw z8$!F_-<5Jg|GRwX=H5X6IO;kh#evSQme!U)c!~Qqk)ry*7_fn-=H8uVV$bdmdAKQJ z0x$yi7Lr7Qr+39?*R=)OQ%^^6Dn@KP*sBH?!`psc@6_CD36Ifc_x@b!#J&C0d1=BU zKUWHIKX5n%r{T#?uoHT6sS@|q45#nzT)ESTdxBRlyDgPV73)iGVU3a2HgkDk=PnNH zf@%`q#k=I*m3FcSOrPMsn;DP`+qt+mlq{}L2fS^zb?4jOz<}IZ7#K-QW2h;`-G@t6 z>)RZA2F`KaXN6tr3@oXulTevzSBeS!!c{=HK9O2QgLk*;17le1D&Mm3?lcp4hEpgP zr?vfDyHic#+img&MBvsy|2X)%XM5Ko_w}EWa#H_vp%Ra~Ts3LVh=?XtQ#*1H* zVM^v~jMx@o(=}g!akbs2te7x2k;Zy|urY-L3F>xS>;F^~=2SW5dZAEU8tESoeHsIP z>8fA!6F-;^I9=pMoT`4}DC$$%#d8eqv=c|*?s|^Sf;;Wx5lnR7CO8Qgf(!M;F}T03 zr!(Q+LgGl=U1Qf#xYJG?f%*7N>hQAd93)Y zyVRO0hvv>gl1Q5C;damB`ojllf{g^xbhJ0Px-Fz%Lw2id{hI?h_^7Ij-DCEE4Z zV$UuPVzp}*s!4pi%-w(hT;}@6azZt~3*5r76Y!xy6lQLccC+v|p*4cKyhxr6c8ilS|bErFVC! zrC-tAsV4EgE4jx2Tt7aWF569Z#`8ys3vxcLir zH!f8N`UWG5BPn(QZgmrQZ%px*jCMDQ3H+w~^HIAi&BUHvHW=CF(7j9b1Tl2Brtn+= zHn(2Re!Fosa77YAG^CiLqvf3ga| zxl8SV5u6=#^C}AI-JRw@&+hKslAhgZ4)hH7Ri?Jfb)}fVZ%1P^<>Rf0TV?AXe>x1c zgo5yNjf<0>)URs%ZFnO*N ztRJ~OMFT1Jy{;7F9b-zlYFkG5Q z5R1E$r+zWGQ%&OAWeElZ;8K5J6!^TJ-|b<$3?n523F2t(h`8t``$gbR)%wOwX|X%S z6jTzFvn3o&^(=R>OWg$C+q$5xQ@jAZ*sXGZ|L{bvxtqmb7ixC#SQpoHit0&XXbPoL z39%U5sSk|7+}Yr-Z)-^9EFYst$-uxk+M_AFod*58QXJ^l{e8Z&8MxQ(9|1kcR#)Ga z$}It@X(x;T-w@`uf?kE`KEk-~vZ|77;R zknhr@%UDx*x6@B1S>_=H+lix3=`l6VsVn8A{;5vj*Baah!yYX4Ed~PG1#3Hs(7c() z#H z@Y9KwVW(g`Y5Ws+xv{#m@Y9jFx&<{s#!N7-jO-wuem`5g+(jjgZ&!@EjyHwY;v(=A ztS2l%drLIjk@^vZTlK^-xcY%bC23cFouOU0`=3};4DJmi%mbV0-(#lse(?S;^WFuE zE+XalQ{H8;f&Sq#-FdS+6SF1O0HYBMjH7ciwqQN(oEu_EMW__-@sIA_m%a=-kKU zCCh|i?UF?mDZe9U7aDQuCUy{u`xh_9(xqc^Z>oQ6;b2p+3(gAx$nu$HT{9%M^p541tPY{Ev-^cs8cct0ib1GL1*mo+r ziM%(o*133cvA=hBx(U6*rH-B7VJPpebd!1K<1>4Z$(JT}C8k}qm@LxNs|gb2LOH4b zfdzAU-afGYChoG$gwaOMNx1^us3!8=5o&O83q=2nxYJGK-TiMZ{UdO%pD>D))4$8v zPx*^a|2Jnl_h8-@9Jq! zZhO0G=cl4-jRyZOf^uypNldMQ(urLuT%(Gm$gP1Sak#tGG@zo~sV9jc+8M6v@VnXM z2gKptgpCE7{?6|qTnWeQ7q@q~xjz**Mt2%iL{UADbqR|;`IVYhxgk1eriS^`CCGIQK zagN(7OfFU8zTjG7om*#ab>iOe-COPTOW>WHQ5P@1z+|ST8TSk?{dWIxI@d~Ze`j^n zrBF)uT5*p}VYhefx=|2*LhyA=m!G_Aa;X#d7Ho9+9xhi3aX$?$5ojQFozV`L*LG7< zjQg!`Y-)t>^}56-xJC&KNmZS`$% ztkgOUoHapYZSVnRcu*$NQa>RS?r7_XA`67;o2NwktTn1NhlaESELy#5sKak1uUKFk2Mxj_dvQZw?mceeRUDWXXe z$*!3(Ezc@KaDI%=E_Frg{Vfen7|xmNf~FLfM}lV~=SgQB-0@=w$hAZrVGnJgI&QB1 zy2v?!Q0Y|1-{o`}8d?;^Z?5`V1CeMX*yPj);3rG$`bwO6Sa%ikj)(e0i9iFU3}#w7 z76;;)YVBxmq9RS5Ohqy?=o3YOg@b``o8ROiZglEoo0N{mMi6MMhgR5*rD%#cxb-<5 zt^UT=04#;O;N4@9`fv+;KpZY-v;&n*ed{EeLLj&t?QFL*E$#41 zRevxNf+sb)qJHSZq8*NftV>H|ftJV)B+1_zY`5{^%wl*;us>Sg;^3F*oNy%KG&Zz^ z9jK7j4yU=rF~8b6XLklWAqNc(bSaIE@J3hYyFs+RqqPI7Bp3;X7YA+CnkukL(XK#4 zAOv6Ii%FEm<|aDPuCtxaNH`XNzoQdHO$|a^p^lDLr#;XXG;=oN$S?>qwO<=|+Rk-M zEt)#TksoRU3x*9ADy+G)DHsYg1^tn8ok$113mPq8N8$Iw*fd$5QYArc!=d)M9qmD5 z#5N?m0R&s4cBVN9?{5#=dB_PIO3(sqz>8u3W&*aWJ3VAZWReu`i(_stx#frJv>XbDB|F(!HwZy&|hEIPYqTYF?e~ZSqUlb2nC>hXer)U zLBW&>rhu$rQP%ioS_)0V51UYHM*te%MAJ-RGr+oRoopu22wc&Dt?FFIv=u+Cr3I@I zftN!ycGzIBEkS~CVxxuQkUDrDIKLv4K@dH4I;0j4WxdcN&(o zo2?caGFBI8Ic;W^JD)%(6l`yBAc2_gC^U?Is}Y1dI@)Zn2KP*cIwFu_XptRVoqp^r zuyxK@=vSu>sKaJ_dv92G%#0ZTJx;JBjQtilbzX$wRa`RhATd=|LHCA>szRhZP* z^IVuEp=XV&;X*$xvlf+bCZ=P1;y@RK>!+;`BR3e1yhLH3Rd=>VomgD`jGJf%8nrn$ z#+qOwwfhEaF=o$WcxMPY-XN{Qy%Mw(vDzFb#T9K}p+Fci9JA(_I*TtxVUrnbi&-JujShpbz?$ zit1Uunbk86KDZeEeKR0)*n#*amQ0*fR8mypE9AK%n3-5Qv841sXQX2X&$;s)PglNY zue?E7D?E;~7hwG7A(LllIuoWx3idkBR}9IYKBQp!5a0A6g%v|eF3G$qq1+24=PvXvam(4#bTI5D}P7b6{5h@AZyOz=OedO9p)52oCg%gMn6dz%N`c z#tyG;Nz~ql1-j{ulT;T{5YyjTJ=`#j6P($B{g(FnR=65s#O;meKcUdiFmznu;7 zHqn!jku$=Z2@O!G z#xcLl*uODjT202@H5s1F){H@EU5(yDm7#55Xjo3Ev2)vnQ805z+WSsXhUXNoM~U9# z@uUxeGNgT$<1GTM%xH%9$c((AjA6SllbMFO0_0x(L#GT;}l^d(X-^ zA`|j@9HhE9V{b5fgjvci!op^zolt}p(pGqiG7hTF7=Qf98Tr*2p35NL!4K2!zR)|x zGa&1|9#6*boU9iz@-u%4(XGtLf(ZA|T$E7`(_xuu!#*@*OlC>Oye5e5I9NH&r1rNL zV115Fdjq`fe>ki{y`zlCjLc~;jb`w4DlF%veSSd=*DY%Pbls+{^hBY0KfmBjTff{E z6HU*6eka}e_x42V(y;GIFr;BGl3+-4^j^#gr8!v%q#dxHorLEm;e(U#AxU_C58I5_(wgqH~}FHd%{2a#N}IY1j8QiACJm$?lm;dS?3|e z_oL-!Xo~iS(>zYN26a4RNk+$0Pn_c^q~(y}9MAcRb39iN*YWs>>v&!k@@yN?RH#QB zIG!WyqBBGBDDi6I=y!KwI9a6Rc~zI&cPM^Lxa(T%6~BD$en2 zQ=H?;ND>dXC0s3gr@3TD^PVKUnCxr$Unb#$z1EPHpPz&;6nNq8|Sqa7*#%Ord-32FHYlkhK+@P`K3khPu9lJJRC@mfBZ zgx{Bh|2GLgf;u#9|Dq)P*(ChiB)ljmUS2Aq0p}#)JxO>rb52Eg9OK- zub|~aX^MHHCSVBn8|?QAvQtCy%&#Thr0j4%cB$g~(eiDI7t-=$iXTDC?I`KmkKZW=t z#eYS9k5>E_B!8UZR}jbJC>%Hs=Ml%_Udg*@haXh@mn46-;xkD8e8o>Aeud&C#Cbo< z@!U!FZ&&iaA%4H&e<9wZ_y@#aQT#LF?^!CTwd9wNA2|POh`+7me?|Nw;^E=Or1(_gn-o8a_@5P@LHq;7XA}QH@jBuK zRM}i#?ZgWeUrfAA@e7DoDZZ3=qvF>Rzew>rh_6)q_r!mtcn|SED*iI@Cl!B__$!M4 zjrgaE|3B<~3w%`7wf9UiV8G~!lqy=p5r-NSF;T3EV$Hxr&*(%V1Vu#?5K>YR5E8)} zH8_cI?l4LV?bTjy!)I;l{c5k+QbLuM352IFpgyp+8nIQ?eB}GDebzeXWM@L+ z=f5P}#8oq<^cWd}dc-$p5e1!2o*6`Ob{udg4661fX;U_b`MZ;Gxeusvi&GLZf;jd==2o3)|#usRKi}4W+|5wJBYWM?;pQqvXv)=C3 z@Y27FH2h;s->Bh#!T4Wl_$L{^M#HaSe2a!($N23UUi$aX8eZ(-h=yOod;-)V_(;FJ z!+1l(zs~rRHT)}#AFAPJ)G4;U5gK0Xtw6(H&-4)uFM24|@V7GkZ5sZ0#?RC6KVbZQ z8h$c(Ie0HT-DyCx6!PBL5x@FY+JN@WYu; z2Jf3uHpQ_b{{Rgy@}HsMMgDU&yx8-_8eZBpR>Mm_j??fTvwm*U@IzVtJ2ZSI;~&)U zZ!`X1HN5bDT*JT0^iOMeiIX>I_|;6mN5c>0`SGBJmvun~DIFitzv$sa4Sx~yIZeZl zX8hS2KFs)08eZzXTEkz*^w(?n?=XIY_cZ*gjQ^*Ge~0mY-prN${U_sb zQ>RnEf6Dm5jQ1nAuT7%9&(Y|A#_hexgC`e$1+T9PJ$MpL*2NJIp6J&wz3IUdz4X@v z51#1H=5@&R9z4-YKTh@FiT+1SU+KXUz3fNb;lUGqA8vGw2T$~3hjku2(a&f4dJmrH zWnKS}2T$~W<@j=$2T$~GvOa&}!4v%f`oiZi51#0EGyT&ZJP&b2zsZ9q7Eg1%e`LJ$ z??^=rxitEBxm^b|`X4iW7GDJ*yP|q!za__mr+Uxfc3BUYWSZq{#*^em+_-C z{DrKa%QXC5jK4y|uVefK#)}^M6M#>RhJW2g`|33ORHk31;hl4T#>==nll$vu8eZ&b zrG^(j^Q?v+#e6ntc=1=SY4~!ce@nw(%J_B-A7T6<4Sy};GYwlI(yr?mpTl@k3!9oE z9HP-b!}P;Fc^WeSXuE2vQ`q@lB+Jh&0@iSL?@I=3c>96+SiC)I(bsjv? z`*|?k=)n{HewM#d!|!E$4dX=*Q&EOK4}0i|bp;{uS>eG`z5nET|3kyiVf?Q(yv)1L zYWO=ySbVlHUgUYqM*H5<=$n}SeT}}6=?`gmxvz3OA2fV`d0U6l{{69H#NNYnFx-TOvLNAc+tg&S6F6MSK30^Rit^hLWykWcK?Qjw<>z6j%A;Y zH<9MjTUxrPonHvibGkb@-lkqw%jg8Ev45~%BP1HjD>u&>8(8~pFc8RI{QmJXTcD>b}y_3yo_%A7@mmh}0BvX+P z@Y7sn14}tQ7*C?h;xvtC`p|rku70}rN}q@Ahx4u1e_S{9?@CiY=|Zo6J#gvj-_G@m ze-#1r`lobLejk??f7@O8$;e2jzZt)^OYGu;q(6$Abos-;QB`_BFJ+??{|yrL(d8cv zY`Xf3I1upmABARm{l7rvRR0BvyZiN1Vv3JtKb&u(rH?$X;PN)s{T{)S!>1gtNsg40 zbQp+q@^2UUSr4Q?3iWmQiJ#7scn{}GtKZQEw@$mToAOKf>h}yy;d=R6lusvr#WN&@ z&o}9G`$_VXE$Z^01)R>4N*o?W-}q>mTGBTJBi-)4>-CclC7yZs z@BJM9rk%R7-ivj`5jjXr>B?XJOS@dSb8)9RQl8>KfxV=4T;7W#Sf~Be#?9eoI^zqmTrW-#hVBwdqW}hDn<^|o44cp(}8Z}B~TsW%m zTZP{uu%iEc#jz_g{BDcXC(CyLQCav=^^26)$%#wMjt$ZHhKy*uIU`#5r~e_Mu_geo`kCu{W9uDhm(YX&6nLjHaFb_4%p7qx1b6pr(bIns$(yd{C3h zP-@zcUOw{=f;at}%*4Xh*?u1??l7x52EF<_$XHu2n0n{6nzR+E{^%z!Pvee0Vx2MvcUl)9pR9mB=ymmxDMh9>-g;EyiwJlN!WpYH@6(63cGNzk zjj?$XU*bvfkSrtz$uQBh{uaJId|h~AxNL$M|7)wc@ck4rV^)2L{8H3q?dmV_$MPz3}9NI^7(St-B@ z0hSV=ctIjXQ%byuPmut1pfOheW*D4SB#{W>VOL5esA!P@K>?`k#viWsH*7T)Z_f4k z>W*X?@s9wQ>(F5JF%ttr_+ls3L4My=Yon%whXFP_&+2)z07PG4{mhP|NOn zCIv1w&Y;nz+7MY5L`wq8%=r2ovvB>~_szmBM*YFFeZHv&KFzIdZd;E@ce7nT6#+;R z(5Gl|b?A(u`h&&~BOxQ2z`yIWVu>>&MpHP)Ok|i=BvfEDjmaTkPBbwe$i4*U8ckOy zWH6d2A7myn37JERFq+09qdv44+#`uQLW%LA#GRqU*bs0Or$-axf@T8xiiGl1Ex^|) z+8aX1%jLXDlGlpvizK3ym&bWC?7T>*LgBA0h$KqU8wIAdHnfj=yQxTtum>>2D^lXs zhseA|y2Hpy+ytgqnp`kPJshp5Iq4nhKjc1 ziE0;=Snt{NliZrgp$OB%pu0L52vEP}!G5n!Mgm!s@Ig&6Ycr*@DP4y`EzNh$`Xha9 z+IVEvbH)!-Lt#3L@xMMrK4F(C@_2}*N29(3F663Y;A}IVQe9F6*V3|~YUmDs%RBha zAb4kH%R6@sT@TD%LpNp6_oK>EGCi&%k!_p3|Egr<>;WXoN~qLK#6ksTqAWDWOa@LO zEZqP#laZ5@^jQ#r5=!*N)N~}27r1>}58|%WMlXgViq&)uD%k8QofS+8FdQTj6C^;bpcR%wmb!(4-ic z(U3xSpF#?o1ZL>oQR9Mov`x3c!yNir*UW zqlDtO0Q@MS`0Y_TTdszB41Se{In3`g;x`BUU_GZPenl!Ha+>0o0zb-8{OZ83<()f* zE>UA2MoA!z@C+hRwd_MJgpY-4GtI=>P>!ngQROzwWZ(>{Z2@XSC!L{cGf^8QRBc

@N00&W}=#0 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

y6;ah%Af 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%0D6XTS-7EW8 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
44$)Yy8Wv0>zy0+nM3t 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 z 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 Djfcci literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethdi.o new file mode 100644 index 0000000000000000000000000000000000000000..1587eafbf1799684989ffc91844fcfed74ff2f09 GIT binary patch literal 501264 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

QB>`QzwlgqhuiGCWY;)U#a@!kY5+z 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඾dwi} z0>jT&YxkUuJZT7|08;*JN%}*{}%oD-|!1((fji5`&swb8Xxv> zYS(w%eYpSE<)il%-G%IK_O8pj@4IbgcZvT;rR`_Z>w1Nd-8!`#-B*4^2y4w>w(UK` zKI;?bFNBw0YyOtapR)_P`Q76n&YxXp{&!p4`NwuaH@~|^IsYTq znZIif^8V8LAHL4~!_WBRpNq`z9;b2sv%;NP>-Z~_SJ~zDiO2uN;pNvl{waH-Owlgr z*6$tya{gb2p;&AFx(iGA@t5YmFC4el{IxaacMml=|55AApY(?>(DT95oeBTq`j1#= z{*ldJu?xEOyT`Gd|NM34Z`%BNe%Us&$NcX3m$lYkyv1*zXcu(zySD~%{v+1A{_TXK z=c{cqd(59)=lbv3{L%co$K{;=uJFoV>-taHlL~tNd%gL;6JB_&^|wFg*B?Fp?r}cn z?}WD2{B?WsLeHnKH~%f+H`baz^?5&k*DmOezkA+*^Z#QAZvNsR zod5md?R>4{-?#bo`pSCqUl(3}t>fRd`D1S5;fI_53E>~k|DWOa*P1{3RClQ$(Can+ zt39v(--Z`nYyRHX{qfIQkGlDf2>)>YYB+4I`I~7!qh9}6Z~j+@mtSlC*f;$A6}zCD z|4HE=&hK8YUTgl~>HdOxJ;^q+NB*C)&ibo1e>}4OC$BO82i94CV9yKc^{MsdfA2c$ zuYb$0e_$7M>wn4`^WV8n{?pI$7rfanuTRYXKdh7g(zo|K{w`8H{^ND>KeYLGy?$mp z!1?cAC;vm6KNUItPg`UD!`C_f-He}5ugBT+dtCpIUg!A7zUSB9kIe5LvT*&+xA|?D zrU}Yt_%U{2`HMf?bN$a=V}AEAZ>`&Z*B!9%L$8ui4e_O4I5 z{FUF`HPiHavtI?l72)OA%1{2M{>bU~ZoAvhi^D%|U)@K-e+upjKXaSzTc4lviM}hm zexe^7dto>Y&5gf$v%ma4pN(F6&#~u)mtSlDhsp53h98B~{MOz6pBet){(sl5e>XPz z@iu$ILwR#l_niM5;pNwwKXb8Pc=6EP^Pd%Niu3=>=1EFBm(&hAd#cuz*NBDoe*e*}k<>cQAml;~wUt7{3$lK*dvp3&e z>(|JyhnHXL_%&Ryg&$4Zu)F@w3;*!=y~WS(hR%Fs=KcCpC(ZC4S-Wzb`7>|YbN&m$ cO>zE@hrqSF8H*qC^C#?aygP30I^yO3FKE$+5dZ)H literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/ethernet/xran_ethernet.o new file mode 100644 index 0000000000000000000000000000000000000000..20e12e869ce9e3bf2d88be6a29798d5ec251204c GIT binary patch literal 150328 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane16_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..e00eee56ff6e7492c27e115d176ee553e6dcfd53 GIT binary patch literal 35264 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 TM*2(q`5oXl5e8#md;b3f7=KVv literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64.o new file mode 100644 index 0000000000000000000000000000000000000000..aba5a6cc4b15f1aa0bc42a782021e7688ff485e4 GIT binary patch literal 57184 zcmeHw4|rA8mG8aD1#Ut}A_hfGG|EMZ1Pl-;Xs#yw(F2B(ptRWH0Eg1*E65)~p#utn zm58a>_r2H7eAAiFwr{3?n0eyk@r|uBO=6<_5ldpNBGQ4Nwy_ck)C$fZ@3+?4`<#7F z?g{taU@LuG$UWz*v(8#;@3r^Zd#%0hJ`Yc+zBMBp4(U%gbaTkP($G-o&;j?nl20o` zxxlnGe>0RH3T=L}8s8gEh4VI6Wzb1}-o~HtNhI&lf5wTm`N>LP*vHpe#p{Vd-j0h} zPTjZL?pkYgHQHUDSP!e4S0}t#8J0(@65q{`yYu;O76|V$2v=r$xIe;3Pp!wnCqZRI z$b3H-qmN)T1!MFTjCRJTQ(Qda^z(?58K%m3Dgy_X#>K}tK1_{QC!5Eha#=DGBr?_~;xzr<0zf7*3zBu^B87!o(3&yxiFm4ORxLh#4 z#u#;qi$|O*JmPE;Qjg)_7pG82{U{itNHBH=V_Yd1zhjI##l<7eRUUD&B3wIB9Q@)G z3#pP|jH?A>YB0t%f^jcn)G00=afW!rd0a@<;oui1CZv86j4@O&b_ZizD;V!FMxEl~ z5$8IOIQ{!@?PTNN7iXA|8Xk;MA{e&^V_Yv7UuTRu#l<7eaE~}o2&v6D_{Av|Qd@&D zMhM2s!5AY2<9)`cQ(Qda+~5&sKwqw%931@OlnJR3!5E_iV|p;gXu(*_7T&RkQ!b?bB^YC@V7wBHF-|Z#8KX{d@rd&|k2rb#xOQ@J@QX8ENZk;OF+nh9 z1Y_JN7)uzVPI2*wbCXA$Ekf!^9Q@)`2&rd+G2();FBs!y!8pbkb&88eoLgv$lXq2R zsOpPVU#PnC4y(S;sWWHJO#N3(wfHkN+%S3blTl3BtLm#xZa5jqdu-gAP-sfs?yAQ2 zNY#ej;i|^N8P?AZe zibB_E>%fcliPP3ijbXcetrb5kM0svsRKpYaqS-u4FPhg+vsh?#{z{*N>0Y~Qv9)|x zz6O109e9Ol?q)xvXf{vHi{@q7?JKSLdv+H;Pvx1-6YipU{TcQa(dm4Zzh5KB^4*{* zprh7-Uo*{DL36Pcf0gB&&9m&Hc>~n*L~|a`nu}KD*rBRI0b^W&ew`d5SLbgzDK1czVCo(!h_1YYP8%L!?2Tf?EtIuBYPRXKeSu>Sj%4lUjfxy z2mZ)>KLXzYR{SI4>zsqvC*aF)I!AfwTuN9jJjN;>T-}@M6VNEsYbR|0b55OA6^ZRQnVg`|wuE;+`KckDL6k8CSu zcq`y`d#ZM>5?^BE(&2!we2kA!dxr&Hq%KseUf+`c;g zqAN~w(`rc5a?0LoAD~;u2{G z*pz_6cBlmud3Mw*K>ido~9V0;9?fzf+=t);9L_-(Lw?9{6-U@5TPT%+6m2JD87Bu zQxx)G?0bms=s(z9v#i6g3@G`J`#AT|K3won2RzUOPjSE(o8W~2JA79cJpCxHMf>*@ zG`HUs>N1fjydu&JGQkv65%47@m;xyR#-z!WkD@0gM~YjBw(l8C9FLpG{cuxgVE*LN zxXuAzZh~)fz*m^yuK{dwd<@s3-Fpg&BW5-r{l3&H1xbWskqM^Ah=8v&!4wV=@Kp?c zTbcyLKom# C`YbB3ssq7Z^!+)bTX&b_Odl+tpE1HQ%tPj$dUOz^z`n?s1tA<_&rX;7F$z}K2!ifst^IulF*4U;2<5|lcJbyH`5+!PumCXL|^_<9q3y8|9> zg1-*1$#FBTl{!nisgvRs!f^!CP+F#7g@8wzV2V%(_yz_mby8TuRA)mbo8_k{Fu>^Z z%1E8RGyC}f=iVq2Ji-BwHo?;!@E8-k7+|BQ>+5kX>YP_jwisS649;O`bQFXTX~vph ziaZE-oC&6IgMdHB;9X3lj$#ZZNAm7Poz{5b*k+C>dAP|mtO+Lg1_ykj37+AAZ!*D4 z05&;3iEB}(RY4qIVC0=59)%KwW84H&{6N4rn_vnW2>2ETH!zX)6e;NV!Xm8Wxvu;F zo~2y(nX{GaJ{AbooBxSj_cqMwA~Ev3i>hPreQ>-pmchq4u}nUGB^Kf1qF5h3u88&J zJ}!z~#K#q}fqYyOyV!2x=Lhq#I(8W! z?~Gl}$2qYp`1qArAs-jTiukx921B)$f(#-x>=QfUbTubdKstxtLsyGpu;$arE1;`2 zu^hWLPS4H6RdsBDT|0t&db*ku%T*q$+{Ce|YYUdhU9jmG4#ehTBi$9%kpLt0u0MU)!xHe|vLP z$p>xj;Lio`B4)F5^6gfX^b@;vq1Ac79tFpOo+QayF}Xi#*JAGfANDBB`rm=CLv&kF z_igN1x7)3#>*GxBW2W#X*EeuhQuv1`yvOweIJjW41FsY=OBb9(3a7wlqi6+OD7bFq zQ^1qzT3ktCk=BLm+z`taeheWU;{0oV7`{jA-4sx11qonpgB-`$7X!U*Q>@NY_BIsg zP5bG%)wzeo*=yHA95~5CEh-SiIb^qW&2RiW0aQL&k>{@v7`|Voz)Q5SV|3a7p39rfFw_$bwkA?031FvM4T)im=#24BT z*E(W1EwKC+*M?|I067SX6(_GrWe-n2)<6X$pYJd8mMJcyxFt`HjrR1oF?KE5 z_g;y>To_b-Q_{Q-Sd`Tn)A0_gc*kIp-4gw@$<*Zwp0h&#X@@zt4Qt@v(gvCcV~W-D~e za5_h%h0YCAG!x!`LB8EI!g>g18s8s1OWyx(?fnA+Q;YAHpC#`fMg`vgo@dGXm-APc zdtP85$;_Wec(Ofh|Ldxvut2-`|3s~wi}ovi<|L|x{r{Jm;s3wj`2Qao{=c)T zApU>8y$t^U&gl!frZ3oSZT@?T0$2;aLyHqFs~_66sXwDdVyO1fh$F4F4)3k5FPLeB z5zsZigqTI!ht|M14X}zX9A9XKx_n@YZ~*+V0d514!l->>uQl{P-~Q@zXTlvLvOF`U z_F6S#dh|{;W6E4`Va9Y}#^f$kwPH@8W=zowGo}kOCXAqqVi#siGB3L@W4bf;Y0sEk zQ^Yf-s5xWuu9vtoCS$#1kFj2IE@n)QI6PyD{wZfnE^C@G(P)3JXG|^!nlXXHr#NGB zc+Kg4fFr}7WC-LA7m{gjb8%?W zwgMriuIbj{5AC+S*1+SKwpyW6{C(U$(P9lf@ix)MN-c$&|B%6lW0}+HtH*?e)EFjC zoGY*zfO1pc>5aS+|n#_NN;aZ0f*Wd>g<_aIx z7b>K$MM8=`)^byzPoiyHX3&QUm-R>=i^4woJ?V{$enoZofON9U+4MKS+JbNC9nuFg zDZaBetgIv!t~!+VCT_~vq)Nq$%kOk!jX_2R0Sq!S2)q=YR$sVD^t8!UgxEh)8I&lR z6RlNmlF~l!n#Bmr8k;SwTKkHch+o1^RiOqU&5R4|R~44Olc1llQzb*zlEfvQqX zJ93$>9IsidP{XlS(v12@o$g{kSY1$xH9x7cg65{$1jARNdV`)qq9^`^8`seD3H4M# zgIcJ&o+c=!SRL|}GZDYk^)z15N76tN^i$W9rjP6cAN}6yX@YOcK{~3@W^XX*sQYl0 zsLo*B#Jp^*ar=_kH(y^O9nGmxIx@`OO{xx&9pNiuB7S1s45LSOqQ|zb>kw%cNzfPT zMn*{)y`T?EH*H_H6>gNm=9R-Y1T3tvj@fG*nj8a-%y!4yg3|Ei3 zNsUsPJ{FUG@+VXmHDb&NMQet-WQ6dHQa9Q619@*o!eMHs(iJDoBt1;+6!W*!?OMU+ zZ)dRiySiIh1G-lC`Fc`a>zbtKr*Hm-bfX`rt0adhZT@brFWlwnQ+k-f+C;L$6m=bL z2&zL--+Dg41iIbJocZZKHMCnf1N4LmUMuxrnfDRHr1XSz17Dj@L_d8Kh^#6f{j=&R zVCGk$W`5cPY8}xqRjG%mVW|vLg_Y8mDwF9;`0+Yx(U|h-sRXjVd}T~jhv`oxu1|`7 z`h5v`Xg>MRs-v?^`Ha3)rS;?)pGyB6;}de_eC0g1;}eqZQlP($dTUDK6SDVw^aJ&j z^!RiK#;0A_TY+a4v=Xb-1vhGo8lTGCHCZ#3mZ**MTm`W-F54DkE`d4W7Me?7zPCkn zB-i8Jo?z;S^g@)?+xDVFvtZv_UCSq zRRDb?Jo@MdwlydA=$lfMVtPsi5W82Q?cVM6IZx?6wSc37N>Ak!nLrM=k8e-)MwQi^ zY1K;?nVKXyZaOnkO(Kf8ubP zJg61QgEHoWTW@q!w*8CFX$5joIgW%(U|%`UZa|=?n^k+b*`esxBef3vsz~S~r8s5! z(9?q|Nti#TX!tAm*I!MWP)K-r`Bt z`P(rnStmYDCF^_v2p7_u|9?+!cGh3a^ky`CWcpr6Z@!S;d?8uqLbA@ED!th?MHiBF zC}52b{pj{DJXwbw0BZs7y#l9t&!)?H*5yxco@)JEssvN_nfM7#!C;l%?1E{shFGGc zH+#Xrmh@&9+(zlmgLQiI&(Gu`S!WMVo_l zlXd2dmiglL(awCa0;@Wh>BVlBc^~#J;rT9Re3&nq4u9ah-kDz`ny_5WN0&SF@k=tI zUoP}3H2w6Gb>>{Ic(|Uh;!!F*%CTLWO4ebG>tr1#1)h_2bY4p@l649wS!XIr4L5xo z%4oRhTQ71dV7n-i5S-GdnXGe(@+K~Eh?h!$pxj~sdYi1%U3&ra(@)lMqsh`Py6Mc( zlIpK!vX0hSFOqc%C|QSeW+|N+$vQpjEX`z{q;-~NvQE-EOFvoXY&w%<9k;I`S;x^L z^)>wHRE)~GN!BT#WF1nWPS$bt_PpEIdXuap{mThmLWN|)R9~o&zSf&$9kGr=A5J_} z*aQ7uCF|&g0b!tQe79ts_f%h-xT#>1QdLUHI(UlhpOLI1I-w#W9xNqQTH7S0O{A)% zlXbdxstPCgEX=sTepMx%tkbPgd2BU$GxdeW-_de9;rrI)Nz&^=iv zSVuZpCxMR8j(h>XL@PuHQKqS*q?2{h)KRaJb(~J5i~(7vh}MxOSx36mk#nD{Q$Wc& zQ{8L=V@7D2KHa6#NY+Vel+sN;jbxpqMk!6dSIIgFN2%_~I>s=yQw>uoCF>M)Pu2oit5g(#bk$n!sKq>v;NM)Pu2<05vCG4Str3Tm2|RB znmS54Stm^$rIDTV)=6=EN+Ve(rSU0^WSx}8r(PxNc>0oxSVV5J z@9-t->~`I#bDOMFK*>5ZC)de3($&aF8qp<4ByM&Z$vTO3RW4(ocBAz8kw&skVqFE$ zKNrb5G6U36M{V~gS*LozFKC;KX38mu>hY;O{bZejDB>RvVT*`sE zZ8&}Y8_p^A+7dmbnXKcrgv1BCe-V%JRo*CIn#np|OV|Vbw32m5&O^h1r7r0;D)cpM8;yghM)vHjxXqJ7-5P?syM!?K6t z<5y#SO?G8O$y{)i14bDEmdzR;nGbNsk1y}Jf*@wmY+koQJy8W=DbHU)c*6nhq6cu3 zQ9*6An1~H7v8i1XR}(g-qe^&zzKdqdYZT^TQ3yNZsn-k0%M|XxLd)H>g`(V{@BIYv zzMkMsrui0Vy00g|-UuLlPZl4RqVkvw!>|xAoi-3ulyT!Q?L(?xPXK1vaIc+dVk3Hb zWGP;ta5wg*7n=C>D?iV7av4UiQ2^{CqJy3M=o@VYG}Y@K_S#+8rf)aX+zpy5X*)7( zC$JmaXDy5Kp4iyWN}b8>*mS!cx9{T3v($E1wDHv}w_<6Fi&8X+d*iYZRtG(_9}mqp zcibjm6M(DZO?ZA^r}z0nYEp69k0AQMe(WyZNS80rMp`ZW+6c5v*|*wQ)4+;(PQGfO zf3}UYEpy}Srqv-Xn(Iqo9+8qu&#!ZK%C^u@K~904 zow6%#n7?6FW zy-&o>-s@UWv6L-`#c*ni=~AGLQL$&60ibzkp&t-40rUuUvDKp;tBW1q(8yL=p%eW5 zGUqq!(%THccux9Igfc;*#;=C^8JU>Sd9B$6?X zUhdPTM`W76?8O`khj-=hde{*5xD41By7szxLNo%=&W#uy-^Ff3R{V7uZLm8mzVTWM z+^xWV^LPUV0q8{-c%=oMzKhd)1_AWYh2fY%5-gqJJs(24)Km_a$yv?JFH;eEv zgStEVz?(vs5P9%A<;vQ!-)?f=r67aZOU_`%dp%uC zX(_7RH|zSW8(H4w$*8qY#mKt*J{d-~KNMz@ZSWb{K?Emb@%UAI=9w+`X!{Zx*#I`% zvmHK9WV?*gHL^imrny|Exml#fuI!A6k%bFF zhV(OMWL;rRBkSf6smg%vtu5=TO!!^ zKmUv@d(@w{k)?cHnPeJ9c0hoUz05JPL(heg4Pdi9+u`#>w#z78BOAnJn#*OH%cVC) z*5TwBS!Urevc#$58tedlp3G#QgS`APXR;TJZ0~2XPQ`v|Mi%zt+!|TeR{YfQN1wl# zPpOT6Aa3u`%ZUU)Yh9@$2c6Z^`?g# zb5c8hm0reE_9d_tNpJvpwRhvz`%@whBjF>D%|zh=VD68t0%Y#rDWU2QGG^50(EgkK zB^i5be}_{!LPVIbLUbz6QTYW#>18S!Jbgi%wcsCk8Se+H3t|I}oj9e8$m+ibwlOT_@AZ-3eVr^aK6sIBy@`(KT$oHT(5lk8z+H`m~*GV}N zU`c6TlG~R%zr%1zJ#YGN&iC>Oi;;&J^#NX~l@zlOc^ib*NgeihbDX?oLcJ79oM>9o_M9|$Hgvm<~ zV+q1kDUjbrrF`t5xl_nREx zgGEF}jGZvobS1yN-wEqVS7l$Wnp5>xRdeZ`NWGW6p03mBtLaq)X7pQC!1T++(r z{$W0<8ZF;17)sG$l;W!q7}Y*rf61-8-_-aL`F zqawcqKNRb^yL-l&oRr3y0jZ5Mxr`p+c~hv7O%x;j=b1_9&|l#u3c2BRF78MM%YUc#vX1&eG6ejEe+g zN-)Mi!C1%`b&88;rjCs>jF$UNA@wK@esKzf)ISDe3=)hNgE1}McZ^Y|xOl|5$|Ft|1_{(o6bHXJ#X_ni7~^Wem>P_6jbPl%7J%4`I5&928Gu_vL5>oXz_{Av~QvVW+F;*~M3C0*F z7@dq!r?_~;`J6|bJUHK|om?FJ;*1wkHw0r$5R4hY7&i*W62_=gTs-37$4iD)-Xf%) z#KA94g^+qC7$Yti`+_lU7K~$zQKz_g#JR6E-3gE=DP-q!J;HgMv2(BzVC zFCzxc-iL&$>Rynrf<&>q#Vkz!H!PU5d-7;yl1?F^FAH`OA(~8D_1esJ{`vaIz=?S~ zat8h@RdmTtnN-X2RX5qtOnzs|7ZHw`XP2)}(k1DO7&sQjo=w8t&_N-RzeYv)ME>A- zkQtu)YLwq-Ln{BFEd6vVv02(Ip)E^50hkb;mWn8_m7P=>w97ODYZ#EG3}q=O`#J04 zRpD2bxOSlnPpl+I;v`9wLpe@8mP3k=i{g|er;9x0`jIZScyz(Nse5z}@_TfVPdmvc zU51O2)5R90i-Ae$0+UuY57;8-+mI$ix(Io65fI7s>!Kj(atunM9HNU$pbKoIlT5$B zY?sSHx>)Mb#nQmGNYk(B03iEGNFc_jiP_@!<#8o>eNs!cXy}eKaohGoSG_H<|e|{ztMn6A8~3* zxC}fE>$U=(Xqh|pwZ^Kt7iE55mbl-Vqo(p{mYyAxQ~J{JX{Obel221O@L#DqO5PC7 zB<<6%KQQv_@~QR4m1oCH&!;J<`8SsTHIct2F(3a-2R;op{^K&pRxCZvc9c&eo2mq0 zVx~}|Y+|ZDO(A@m(!r#Q!Q3=U-juQg_`d$3R{1nZ=tB84N$7%n8f1zkGix(^nu0AJ zU2tdWKC|-c0zOT_mZWu|e44ZAVvEv6IzCMS`80(gDa%38MX*ofnL#U`CW$tse3~B1 z(HozpV7BBEDE~MhIs#pI1|;}21+$aZh4N{*3}`U3&#_NapnMukqzm&YJA#-0OFCqH z$`9=69i}B!KFyVhu}w_n(@6GpKra`KkWZ7JT<`GuG;FDMON-iG`9 zkp}5B&1O1Hre5JOeH1EuZ+(>1Q`J7RJ_=RG`Rt>x{C^=n3YX3RKF3>n=UIT2cbF?$Toktng0jOoQOx%rUC7{SLrMO+!tk z|2cCe6za_%Z64K|zi?<>pUAqb=(+(p>*$l}^}5WAb^ZFT>z}BjsChcd#E%s!EReWU%dv-)TEiS+Fg?UxnppPkb`cR(KE zV?EzLcBXg#lo*cOe);|7@Rx_=%gl&m_U%I@$coarE`u(QE?Z9j0Xc$|okizVzJ@cs z`=|L6Pogc-=qpzq%~zz;SLpUVfeM5b4Co_~GI()d{s$>2BE6nT}12u%Z5n%NVQCgYMAwBCh zh~JOnUIcjb$-o&Rhg0ucv2f9_nI*+b?ps(@Gqref&7|SOZ@^#iq$P`&-n(ew^5W5D zqsNRa8(CI7OrMR!$>>p|%SM$jDSQ>ElkhiYhQh1z!-YBhqU5&IKCJYoKhM*?g2tx; z=k%vPOV_BgiMja`a|ch%Ew0KPwxQ1xk#A)_nUOhnO>QwmaWBe7Qe3(nXpD=5 zx?Hsw7^J&IAJST)PbTRn!6#Gc*MBQBBz0oKy$jl4LH%!d{>Yn@gaPI7vqmUfAqo21ROd+ z6@U-no8@}w8U{P^Yx)C*c;UKSn+&+8Tn5}zu9!=Q>zO({KHoFoL}wlW@!4*`2_Guu z&mJGVQo-8|IMG=u=%Jz4$%((b&kT3rrXFu8^}=;|e`dhV@)nNp;>%Siw8?<8{Hnaa zG~mRS<~sCw*MJj#rNTe$gRfKYf|2}~qxTxQ3~jx^3)gy_Im!z!R``R*c;RIV-ZssJ zM{r7i^tpS69H~CddVAjo*Y)-_C75oXmGXFKmjO51$=F(#KG%c7Ut_?vEOhI?8*sv3 zM?idj;)6FZG!$wy;G{?Wx$6!&({k#1J9DQOUaTHy`GOa&>+MI2TsZ4p;h*%ub-&)V z*u^*N`I;pz+^iql2iNudHwK*RLG_E_OIB6brbp8C$2N$eR z=*9JOr~1^NpFS*S zn!dJKv)8$Bvp(akyP5HmR4Uny;q+V;?-E@EZ&`>8n^C54~={iGHQRKk=j>X!=sPP$+kc z7hb8#HPnC;32m<`3^<{#Q~2Be&Pzwj|7#z7os#FM0XOR>@;x6Ng+Ig(SA45{a7}-< z0XOL{G2ld^LD8@Kv5&8!|5G14r0|;zxLN=E4LFggRQM--a9uxxe&Xe;>6aRCll~+F zZql#&zdkxzeji-xx5X;5&Wrtf2yb*#{q``tv>?{NF9X*ZrGr)89i1KSGTL9}PeFxLikl@Y$-r z<@n$lKi>y$QT?!3$nkioL}N&$53c>obw0TEBSRyXFI+T#R)j__Sh9HW!uwW) zRxO`@-(35vOXn_Fx@i7=3&)j@T(ER$XykoMRxBKO+vjJExPQg`1z%TBF1%;%SC`LU zyf8HK{uRqt%(rn|y_kTg z{quLs#c>s5e`PWlOsOGIxqfD$0D~Ef0|R+Jh`gT`Gw||c@?$`0?j#m)?zr+%ZbBFyf%9%1p8q754 zf@sm_rvc9&QqQYlQ;_kUug>)G?*pD+x=Rp;IZw)ou0MSw`AGgUAKrJ>^Hn}L;nGJR zha2a7Lw)U6&zmqh*UxEqrNEZ@^>;`;e@r8)qn2BPZ^B6;{q5T?7?wgL{q@J6eqQTu YCSZQv^vJ&5^bLF^FdZnm>wo_L0m(H1*8l(j literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane64_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..49a58233ae6aa77e94160558b2f7e61943a7bbce GIT binary patch literal 53480 zcmeHw4SW^VweOtd5JLFozzGC8(E|pAHdc^uLKG{65Cer4FbG!C z5Yaw++xK4k6WjOt`ueH$zP9h)ek73CNUJqid$nlWfc7?41HtPR?Zv$RT6^!AJ#)?^ zQM`n{X5eII)?TyLf3N*9Yp>aR=H3Obz^pqK0!QTHelzPJDMCKluebNC5yjQon^gRMc{`)JevpHXD z71mK$331$<{n)wNPll-b+1?z31;+|+jv<1hoH=Tx7DxLT>VWe(A?kkY+;D~oQQz?9 z7%n)T^5z&JIR3;OwNi@%&UFqrN%3r*MC{yfMha1ry*Wk+j*oeBj20YsGDoe{;(#;8 z0q2Mi^#FEmIAevVZ+dfN3XT?Uj_U=-pP8dpYH`3B=YW&qXX_+m=Z2FdL{0VP7%w=A zyg4Qaj=PwnR%&s;ndpG?c_FG6J2#ww5cMr@j%>kk%9~@7;CP)mYNZwjoXHM20~6Rf z1F&<$nIc3@^X8Z;IBxRhxIu8-%^bB-iv!Ly2b`lqR2_D1IMaow?|5^}5FEeq=ExBo zZ!kx#)Z&0M(*b8tB3maFJ2#wMA!>#<$1K6I%9|rkaBOFeTB*eWXSM^*gF;k2c5XQN zLe%%XIpzqCXT3S*3XTrusFhkAaOOGSq$ja;(y(*GnJ+}m^yXL~IBxdlSSUDlFh{M_ z;()Wr0p}qh>KJxzIE#g-$Gtg%g5x=FjwOQQ0&~<#Ee<$K$;C+@7c$lte4^mv1?vme z-C`bmBN?8SS)cH3S65fjkKuIjR^)4_dmtIUdwubxL+>S~Kk$VT!>Da+Z1W#_+SmBU zIP<59Gwf?N%hr9-FnzCgovnKyl|}@YFe0cfpaXyU;iJpwAS3<$n<2uidw@m`1T|Cq zHGSl?cQi7|WS2g(I6l(3%k1EBLPukB>-jgCr^K zdC1&u2A^k~CG2WvmJX8Flgv_foiq2OM>;o}9sjB%L+2|*srn^k;snZGGtc~k6~ul9CMhuSGgnm{q@mOjfq@6|yJ8V7DQ2 z&v3rd9KpNd>m*<69JAxS?#298h~e9P=AKcKnbC|EGRH8QcfG}Q0?qqE%vf1S9lw&tln-QT4rfXvQ>LC3VzR{bXl+Y)mw zLTLUJc^-A`oG)^EqZvHcbaMX!b=kUk+oW`_{$eK(t*G~T1I-GMWNnfShlHS*#H`5HhMtZGd=z0TsnNG*+#j(&n zUFev>yFEG7Ff&6lrN&taX2%72yc2nUGtxT9ta>Ixk-li2>0rGb&^z1=c934{7`onu zUZ&Hr$nTz9p<|Xvi3lB(-#vLEWj50;Mb->5JKl-x#NW3gtqEq;v(PI@_2!v>XT9%0 z?;tby4(YXyq3eCUL5N8fXn8sxCfkFWgcjbti|7Vo~UX5>ldDm%(`5(;{sD&i<}1i+!I+$Zw39; zCmO8dKSl0=?iYMbXJ-W86snuft_gOqWmrE zUm*~k$Kjgbd9Ypvt2_cLjx^PcpV_e(x2N^VyWb^^zxLs8TsvuB@FE0kX2dOwxDldS zAYgB>k&;`Hd{^*k5L+3_DLP^(r!@J<+Azr9mAw18$T?JwKT~lTx>P2&fxOXRX)m#~ zU-C5lJfh1N#Dn4YsaG>-*-8RNUEjnJ+b%bq`V; zvH9HtCywAwhLmK;$$O4c+fGF;9x!ujDPF`$V-9CAy=x;r0y#58sDG!JD9yzh;pWb@B;|3{S)sau#GA z0mbfM1!TD-*@<8nBREU<|2Ew0f#AQ!gIVyV=;VnOd4Nt{ZjsqzQ9{Z<))5@Sc`8dS zO?4s|%Lx8Lx9qmp7{Ox{NEE#AVr()+4+S|*CsW8!klDXcLMTpXA=tm5$%leJd*oq? zdocG_(wp~hkz4zi_p@36=2$GIr|t;3qm z-fDE}%oJl0Xol-#3akk72%SvP6hVg5WaFa{ims7@7oxPcjwFp2b><`_3K{U9Y#Ea+ z@@Sp>F^fD#C*KLOuJHk!i_+aXmNde%f#^4cRVh*;G-m2#3Xcf#^*WhiB7!`Q$*+nk zL4gpdG4j@ab3s#_C{7AR2==U~;!Ls9#$z)la6r0eCvmu_l<%cOc!0e^D zRGfd-+xZ|XZI(`+VUhE6@+ylwTPJS^SuIp(mE;Nsfh{3cFiJOv! zYBY;l7ZAhxZlVKXST973l^135xcjU;yPo$O0^=fUW>7?>6^P;X;4g;uGsGwrC#R)- zvn2a?-fsy^;QhA1L^+sWlgYzsT!DL?5OM_r`?XxA0jVQf4)lc%kv2)DVQ>%4uYH7r zdkz4w^eq95@quJp0KvIZmFE;XtLjw>DL3oZF_z%R7Sky=FBTt*TO z{3j0fg`)XV(E{GD3oPXQh5&~89A$WHd#K}=YIOh64ERa$y1-(oD5#(EmA>dVjxjmgaUb^hdB^Z`?`e(BIY~ z2K^keE^MG1`b#b3vfLXE#D~i+m}M`Sb>EYLfR-aG3}*Mkm*1QBbn|=QDkayVt+B{@ zII+stTvYpxSz8?lg=-H7j$?3L(Dj1(V?68VO2pkREz=ktL) zpDx(0{rq5u=i{3$J)bxD05PBAhywM;eEK~fH5-IHynTWGm=7NI!xCEp{V^Yk^7O}i zDE8VP^P$mSf6S*p=0kC#Yd7Z81=pwj?PQ1Nb99pQeBPNXV?N)Q(eL^6$9(L0u>GD- z@SK>&+VA;n3-mwj63^5`D5l@@>Gyp4pLSjQPrLBI%V=u*>la#@+Acku8i;h>TXgUJ zm}e;-q7{mXJZ*)6L_8k@%R^v!0xXB;Xgrufi^prxJi9a=O#QKVZmRe1Hfsw5rBWd2 zJe)wxMRnh&=Xl}zeOLuVlUp%o2u}uwt;;n0W_@9%k1osN=X-?#ziBN?GV6{8j^p~~ z_jaWE@W}6Ipay5~ISqOMcr@@3&cri7I~%MuQ-g?UL<}*-;tAsc;rz(M1aFDPi21rM zM#1xGjR&)jTs&qSa%|RxfuB_Sec`%&fso8`QSI-Mzm0~8r;(H^N9H#g$&|>M&ybl< z?k@9`U6py(2PlnJu2}uyjRe-L-4Ljh5;5C}5yx4KX5EIse6#L55)qkUnwCXO8g^Zv zNtQw}S<1y@nE~-5HiNXlP4#1U+vScYyHxJsOe58-4^z2^0~u!RR|J$+)QrMFYD^Oh zqw;?waGXuB(>TQsfMN0&CeRBX(~@04!*wwWACtCRj9TG`Yu}O?$80VaTU5qLL1*8%T-7^a$~fijxXN8r`{UdNH9(k1&VcmZhjPb^ z`ppJY%Uz73R#s@jFwfk@6T9&hiD@H6wSPeW`U-cx^u8O_{CHY=W1QXojt~<#9VN-L z)IAy>RsX}UXvi>aJ<9H~lNFlj0==4ILc8mN=xRDKipR<>x)MnA`(#eh$#!ukD@#yx zvG%Q1)lSTv>Au}@#`H>u+3_x%eD{d%RWM)P#TebIVDh|+hx$j{Jh^YA3{9cqkXiR- zb{Fb?!oAJv`uxw@RWtRoXm#PwimpYrI?T53MXUR)R$!Qe9|eW_6RwxDHAc+JcQJ~5 z-LCOqioT1-D@#PLys>`z9<;n^c44JX!|kwe8rMJ7)-a#H`?khqrPnFU@@E)&TeI?{ z-vKc1-^CbRR#*h!;vwwp=%_n96&}j!tD>w#AGx}I@srMW7LRszG|)g@25xoBj`*KM zr}?BKtGt3hG_}}0%9EP0v7{ghSj=2vk%5abI+s{+;NqcTGtjg`K>E$;^f=RaS;96VL>m(L4Flw7otCMg! zWvjsA1{WJ;BFoB`-O@O7W^J?C_?q9G+Km6Qe(Je|v+AG5H-y818WgA0f~66TwpZC> zKCxheaV1&#jP}K`dLkx|?u%n7g^Nd4QDtxLB8jGY6thnFS7!b6P>dYfjZityScTze zgrOcYhqW0D%HK`quuvl=kDfWK+Hmp6%!T3EQ`7hR+TR>O9%hU;EL_AB%VHkBsTVC^ zoQ5?ISTnO9?_Ox`JTH%E(j~14X0pB-6Kga4$-F8RD}o_TEE`qFnC^+S!Azz@tkES7 z65DicXIeu%o$ISRc?D&1bLUG~LVKXmtosM*GLB%Np_Xo*eOXa?Udy4 zROgtCoY~w378!X2SuAw9Z!^g4zZ%}XfdDhJgom)O6B+22(FVfO5^10lnt@K^MHE;Y zOKVt8u$fK@Go7TYXO@UpP?TcmiS-`x)ePcA6k9QZ6sr(8h0JqQ&%5G7{Qo4VMaOW8K6n=9#lB6N~uil1jXMVk6e|3z--t z@%5aN#x!~b1!(V(9L(dVzo;{iDPNWGOr#U9$~eU`=~WrK%-|^+*PO!i;+;WWPmBq{ z@(9z5aYV^yk$h{A<_n+Y`NF@UqxH67X=3$stoFSt_#2){+)fw0go`%otCfj(0>r(+ z6S)4l4(Ih_X|-_h1hSF5`z1`zZlqJpecl__%&*))%@hla?U~48iLb1neYWV>)E6C} z*lP?!!$ggiE1vJODmto_P5zoiM*PAipRmZNa5niY$oh&id%dx#uQ!fT9*;&T8efVo zZlXm-eYCYKx5%iOHn|LBUHKuL%jItRQe!Chi=4}qZ`LYf6BQNWB-vVJY+~?kldV<8 zCaN&Va^)MXGH(B8%z`rO9yQSYa4qMaD)T1MCT`Jt%$u&I9y2VW2?a;eF)yBrVIa+d zZ-8rsrFoo5#~XSabKXBcfF5uDi1U0JOoW{EYSF;o3PEYHS&=b-^KrE+d>s2Snou2c06b^NQ zt*R3|L7iZe>IBRFY}R5d9xiJOivhD8c;o)iK!4c6qvTQ%rIJf95~=Qq0Bi&IGH_HH zi++wn-d6d3Vb;FoT7>a0+9Her1OKiXAy22TnsIivrF3M4~R$7 z#PBcz9f#-H9PFV-bBMqR#Riu1Xr4LfaWp-NR*DWMk(~A)As5G)AcZYL+*^uhPXqX=Cp z&(tvMzD=>Y)%Dx5#iPzre$<(bSMRVsKZ5t!2;LtK&?8QJz+l#WC2$-RikGI^A%6~H zBId2&KSA)bZEP4Da+K4~Aw5)(k72ZIs;L<^pNM#C*~F02B`Qo0-znrvP({>RJzx4J zWfEB_=ZAweNau$!BD3Xq>kns^9`BaN$ZT&iS#D<%5fcj;NA!i&X$A&q77zaH2LUS) zO0oE50d0w_qMd)RY^}qnM)*Vr5z> zG8+3S;Yvhh7!6|HvY@pG7h1;D91ELIl%kd~47j62p`J3I-)|mlqSqJSRNxLj_-I#d%y9aH@2#m8(Ra?BHu6Sj+rR%`ZeO^#x09bb!-1x+tT<)|DhINV_TeQ zF^7F!X4$YWnZEbB&Z_U8)LGv>iA%+tar*AbK0d&APxg_lx;m;)6jADv@1AJdDM*M9 zjU2?z{nBX;%48j+c%cUezcD%MAcYP+I5>u#b&#Tn=|8NMTKHLl{Ju*F-#yXb#G|zO z`nx9@910`?4#gea*5RN?)-YQ8f4IUZ_!&lTM#0pl>~@PvPP4v3)C3#%Ry-?aH;9%? zEggZv8|xQymumXXgG)BFI8MZbK%{bS8Z$NSMtS21iyKF-S-*IS+4YNPIrt3EA!-aX znPw!OmEx)4*krToWcm;N$v-93c)VEq2V92&cqR%YX8(l|lPbQcesNAr@d-$&h?$Z| z-F5xx6xht(U`wW(Q*n_OwiKkq#x}qU7QS-gf@RjH7WK+( zvR9VHml_)y-?i^83=E2brc%-Xtv!RIQ|?On>?m0&-{b>S%41j~Tu}S0tdwElD-@wp z7ErDHDc+w)#cSP5v^p8HwEY3ka;ECYv!ueYDr=mYYMKkSUerT8@73#J0V6F?HIdqj zM^&uurnnOn#F#Ax)v=nYBLbmR+j~(Rr#q^nv}JcqMN~(i@NU&9Xs6t&W111wGB!M~ zYU!{d8?k*ShOp87*=t#{>iEag0jkcr{BElbr2LIk9YT6-R~>1~Yq{zW#P+#yv8v90 zOqNyW!6~xpjKa&Ay6JTwPTB&%T*^P#8@}Om>r|K?G1|AF{)JD6rCNT zN=R=%I??bKj7%ub=IS%&yki$_}31~hjtUmp6oi-r*oPa}bUWbQx zio7H>ki2SNuG8Qo;Q)2Cmq)8Nqi*a3&$+3vQ^SP^WXSF?L?d_-Ta)8M4wt_@{< z`sF$e&gTUjdd<7rIssvwZ+UZM3yxFX9Fqjc>&)Tx6hy?I1dUq_1L+sbJf0Fr@=|b_#4*g(=XR) za2^tHj$!Av&SFt_9{1+>NWNUxo;^wU{367l;$Hs@wZ_zwc7&n5a}4pxFj;Z9?n#R8 z6xAP~h(w}_>2w>A$mOAVql}S71tj8Cd@L&Pq*C0mv5|BNy5mtQH7ZP2j98Q-F2N<>4&ga5a$F)S zDomzyM2E>#N>rFkB@Cq49@f;}ucCLbUTP679?k7Vtc;dFhjKp>V&hviu*={hjrIfAg_5fN5AqN<=iqH^KM=oZglSLDvpI>ZytP#q5p zRZE5{{osZg)-AB%Ucg3p0=rHFMg`YX#c~-6QSfdGZj=|E(Vlq5Sa{Y2s7Aej-o-Gd zwtjF^jqMg%rWds9J)w=WpoIg}23t_4T11^{=|!E&>K4y z#gy%ZX_6Rv0GuIWq8)GwHHRh!{Bb}(^M}&H+TZVw}YM0{Nfwy zQ}6oVmYUuzuo+&!a>x*_uHEV`@F8I*Hfn$$u&2uH7S}8A=9Yk%bi4WqUf9PEofrje#e9C$zGZAoj|v{J)1!KHNOv9;v-j|bM=zHc zk9bsx_@XkbQa&n=ionuC(reqJk|xzX1b5x;Q;#YJKG%);>UvZ?(~{YE?>i9u>3yt$0)f_S*NTq)D$?k17VfKJ}=2#?wb0RnNe# zu1D1~o<8%adWLp&J*uAZTz!wKXG~Ywqv{z@A9++g1M3@)s%Kn%=TXJLc5Qi7F#%pH z9u;U5Qj&FdBtJ^`7e0_xjy;JA3&Th$MN({&E2x56g%eYs#Gzh*gczA zrN*~E(ybH62>(``I0Ad^J8{ya*Q^s417DvyaXsVdBPXtBU{}|P>lsgrB6W24QtL((}45*KsxSoOajT6^1uD)~PVqm+roVb_(uN5aQCOF+aD-0}-dH||? ztYFmhK$Ws2`T?j)T529@+Ui^n4DZIZ(YrRTY7WjAK5W#;%&}|6XJrSbPMIXTwJ!L{Ej=f-u0=ww{5T3QMt3~p6Xq@KfPz~XFj`c|ABi$@o`Cs0|%t1 z6%8G7-H0)x$6dd6;)KbQrrj_z=eF5-^X4vExO7Q(*BkdXjJuHZAHJ^c4!W^WBJxg6 z>%;CT|Al0LA~L{gvcN55ff6#oMlwN!Y|wrFSC9d2Bm>+`7Fb6XxRp$BJDH%2Y~W=- zW9fzXuHO9dumOz?ujJ=5mL>RCq$HbzQg0fZv3mHhHKRtZ%N+ZO@mZhD4s4t{rF6#h zvRS!z%*nrN!TfE(#j(nNc~auafdh)t)51fC+>_z8Rp^Pp6!FLXwE8I-EkkI{Ig`#h)ta*yUtTx=ZcT^q+h-v#(rzG>1(vt z6htmwHix8Yuf*XO?&AAHZRgL>d#-mqukm)`B}{&P{q-(wSwiHkH_dFn@70q+^WVF^ z{ifm9?MViP(J(2$>O!1mOuRp5CDAXN_gv7v0!9S_y2eOWPi3puH^9a{*jJU&Wpi$l zCIs4I!O}Q7FPEJ0`%eD;FV@a~ zUm{Nm(lVB%ja-(NwJdGQvb5ZSwD})PYlu6PbTqL(;X(hg_|L_~|GXq^enDC;Gk^`u z83k$5p&_}CXmZn(l4!YwX~%sIxfd6C%ccChp~?M}c1(wqo=Tmo++w9q?;$;`r5{j& z zV`n<1F)ZEh=$P`7DUZitpM{^-Mjs;c8=cx+%;uyqX{?RBy;xg3dkoPj@$5y!qPx9h z!4uDxh{aD z7k3!gJ*Ls6X_+yU%{#`UIX1tJvpV0V>p0(c(G|`Eb8LPc=kGPTjWCwqp(sc}rB%c{yLJ0*jv&ywA!C=f@AuIl;D zWlnmQyr6xRP3QV1=?hjn>8gDVxY?%b_9-j2>3Y7t?xHLE{7$2Der5aJw#Jr2c2irs zi>~r@$6CRm@|z_u7;}qF*YkC^n=bW!L!;~MD}9|UN6+u}^)_A4?{{5vmEYGjI^&Ug zCw<(Oqw77c(RKV6T=WKUxiRe%ww$4oM!QEex{m*%^f$?FI{v&{#l?!Q@bA#*gr`BU z8Q<3Ey58(h+H!RKyIk}dDd%yGuD8cgx7l)Z{GZ-n({=nma?ut3f79rMr$$_EW(n&Aj`HHO1U%6B86P=zLsV!GJJVdAG zL2A2un>Zpm{nYl23UNfV(Ta%u7d~Utb@`1R^j8nr{JP$uhhx*{lB0&rji=m$e&io) zejVoxUy4mvep4Kh={G7>@X@=PXjAkT@p1{;j=1Q*4G6j#>nQ#&%JQJGCvA%UqP!oI zzo*l`D*3c$6fsEWO>ueYjyc=-X+ez>7sx0xS*@Cn3A6>>%rqL z{>LT%Kf37m$oirDQ+NFwA=Fs+{RVmcWEY(c1==zfJw(8;-70pLoEk~*wO+{|rI#8F zwkW-l9;H{(d#zXUN9px@=#}&+y^`K*y^=pluk7TcJ7d{1B)pzt(Z-bQM)~klvZoQ!-kx{qaESdk_>aCG- z+*cyM^S9YPRI3{*$U;jieX4=naxC-6Bhl8gR<) zz@mqw0rqQhs9bX8`7sxLzC6#8dn!NK6qyoo(bc&B%PzVae_zn((v(ceko^kDmsw(Z zu0~g7M+wCmeE@TcKb0C?4#7F$A&o9?6-<9zqYu*LJg3pqG`f*fRlaR=PIdX7>YPoV zTs>>SvTZxc?q0cV$L4AZbZ)NLQeKspTTx#9=^a&fFWXyPUc9;N?gf!sD#}(A?w-GC zPp__@<+^@W{*?;IyHWwUF$EYoWjnTSFR!RJa_+3!v8&S9Q??=VPna&$y==Ch3(O@-#cFuc)*vS$xyhUR^&s>UwF(D-a+o zc?AN5C2axaTQ}WNwRwBFk#kRVRrTfw_ItPUo@-jwjxC$3HyfKi7QT5|L3q>6D_7pK zV%?^71nd3DvcVo@3eyZ2B{Tzk{%TQ<$gTd{}h>y|<& zSW!%*e05E^AbKm93kBkOFY#_!tiY+0#m|GJP0JbJCe)W(Rxh8GU(U#u?Jd}b)-|8- z#%yR&c%dWLoiWrDHepWLJ=OE|lUZ~1vwXdgfB56u&^bz%!6D?xNpX6{l_Hxk>CgD7U@Ru#*hoL|x%EE_`w)vhhR3N<^DX-8j3MghB#X8u zJ+40@uMaVo{YU9n`v#BepYyn0*;v z8$@iM5;J!vC8X_$f}IaI1X_XtD6u^b-F` zCDVof#TfYMe%)LAe~f{j;uH$E+CSid|3WYE-=}1{@E89a3D|V|Q`z+v{~IyzQ=CHK zR{NEp#j=0tcaVVXfY@1o34^{B;Dlwl@V7|(4@qXKKUDs`#eXRVeu_IN+-koX;A7$c zqr|^S>Q_5A{vuo)3x7$2xI(u-jct32-~WWTUT?qDW)yC<&w$-x;SYURT;CJ^fw(>v z{^uIR^*VkU8}t@`MhyIPy~3^bzxJ^I@m}IT#jew9{3w1{sws^)&Ft$x$&n<{kf7)?H-l-3lu@_!Ool7FOb(uvbFo8 zyxtn8dXS$;=kB8j0fu>1P|2PPyLLI3~& literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_cplane8.o new file mode 100644 index 0000000000000000000000000000000000000000..62416f956e4d876c5bdce6c76a39514725999c2c GIT binary patch literal 22120 zcmeG@3v^UPmao$~cqOwFGbWwRObvKiMKR!u?;f2)V?NoT1tGxAkp&2T|ZGbRGMX1#f?gfN-DuPc# zSPlsHsR$jx2oJ7@deXM_Rq#;J(Bg_F4?fA!{z*e~YG}XZXfJDME)DH1j`pU8R;-~l zbF@7gnpZ>nl%pNc&}ucbqa3YAL-T292GqeILmFBKfc?ksYgCMKir0M8dzJR=dKF4e zx@axvY#4Lgx4UnlRi$D@}Wh*>(*btbQ~>M$qyfi3qwl9SaaaPXRTw2P4hXw~Ae8^Ykud6+4nWy{lMH zJ$pkk#Fuju06fUr>pi_k0LO{2$qk6PxMhZ?ZxAc}gUk?>R+V~?6`INZ&ZF%}wEAO` zRbumhz4`-BZyBrD1Dx+-J?);}F4o@W={>+Ib_4%1Hu)3ce+c+@VFmdIDxggHL1K95 zl_>w8AKwM)<&}R(%nPHCW5sS@T*i8U%SaiUI%E4;V(cKsX!Jr;D1LS{PS!P!K1&)q zb;dDgiLuKvMQk`z?8Gjt*a=>-luh1EUeN|#F@P2Hia@1rAzN1eiZ`HZ3;IKDgW`?7 zCs{fA@>163W7YqN>BE0w^}DXB>-;CnqB3ef&@X)Gjn{3dMgH;8&K>Csw-eGJ0=-=1bL+CF~Rnb?Z z70PE_0K!PK-rY&YQmMICNI+2C2$p;F~6y}n88TxVu7ou zjY&@6lG;8ysNGPtk!Qi};sVeiG1hH5`s%W;jJfV-2dQiWMh#l^ga zYOnVR+}40AR$=N>aWT1}+Uq+6ZX@9Oh_5TT+vkMY(pekH%mD z#{OpjA;0=z8v9#e7;;$o14Cx6>F^-9z($X`d_dhvanrNM(>uW0chE=;F^PEdVPL$O zRqRTp2nB?NtY<&PY3B@uGvtnT2uX-r@C!%_2@X$hGmvp6%V8*-Ov5&W@#OuUy)bxx zL`?c-c$PqzH_f1-{3B1_5qyuNkSS(^d=^a!<5SY2IoZ>CfKBf3^v+>DJ;b1&Giczc z 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_snc.o new file mode 100644 index 0000000000000000000000000000000000000000..e17df8f20f063ed1705a4737cc3daea55655e7f1 GIT binary patch literal 40192 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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_bfp_uplane_spr.o new file mode 100644 index 0000000000000000000000000000000000000000..a83f936c75f78f2231da774fed23572c1d871820 GIT binary patch literal 640 zcmb<-^>JfjWMqH=Mg}_u1P>+(q>%(2z`_m;Y#>3;ypq%$jUY{h{Jd1h08a&%0B3D& zeIQnF&d)8#%t$#upb9=_MBwFzDswm!#^s`-SQjmn0@3bn;vlsk0HZaK*kB1L(TL1JV#D;ogdBhjCKv~a?trpk?gHrpspEi(OF(G=RS7Wk literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cb_proc.o new file mode 100644 index 0000000000000000000000000000000000000000..2d8e67d746460c6d582a080ef520eaee4500c059 GIT binary patch literal 143992 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�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 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_common.o new file mode 100644 index 0000000000000000000000000000000000000000..a3b312a2c6899eaf60ef6259ea9fa97a24181013 GIT binary patch literal 349696 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 O9L6!BHH@2HhbWzO;drTax1baU|Din{n@IR) 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 EA3R21#PnBz8NiT@lLIwq-RrYKl>|0GMjw zomRDc)kVWF)WbwkrCGhO)9=j>sHM4T(HoQxt!dGV-9eu`v!=1!!ipP%etBlIZ}zQ* za?1v|YLXA_Y|@K6f-P$4b`|=?@_`ex?=}?g^r_QTv&Fa7axS>oXpz*ybFD{fBPFk7 z94}mu#+z#xQjDM^0Me}SN~B_{>hiKl)9fa-_!nifa;LIM*?5OqI8{-<{Z4c_V`?!M z?C2|g;50Y+kY-IJcA@aDcYKjLbV7Z$8l-ftzqI3(%9%#>2x0xDTbt!WFBT_*Y7=A6 zPX=SqEr!uzf3RJD^aXixDdfB-a;hhC{>E`6Ft`h@6yx=h zWv;Z>G*_IRebZa^_Z4QFX5aEE(rfyWvqracPAR^uOMj3je+?G;E%&BVBW?`8d${f`2NnGtw<%E7(*k@t<$4?$fx z%?C@&Wj6Kum?2Q@~`9OED-3+&=_+Tl^i9g<>d`lTn?p3sb zqw=!oW$JN@Q$0!*s7xrwHNJ9-H3urm%}|mXu_PC&&@Y}n>4hkYy&tzE3l|#ljgbo6 z3QMHC->kd;tV-o&EK)gIm%smVz3zb$ffAU4uC89MsnzR1U3@@(49M_TTi*&?S@nu` z%tBS9m-WME4gE+H)1M79T|RIyh`!`QuS);G;+0;MCw~q`uw1RgJ1hU< zx8B0LzU;i263j^6|9a+|>I_I`Q>EY6_O#-$GmBh?A{C>hc^cAUzzur#9_8MFqc!H4 z*VLg`YnQ5Yv3M}(!@8IZHbDog=cffId2mZ&aM@RygW|3LlokF895gpCqvaLY1W{Q& zU}?`@@W3uHv(^U-p%mA_5}cmEwXN=_|Ifcu{#8gJq!)jdApiJ-W8MH({-bbtY5sQs z3i*e+fm~avQbmEyF;Y3RhZhWVF{fJWt5$z!sa-03Xyk7dex^&eN@{7f`sn%m5)o~Y zaDO*mwZ?MiXaBym@K>p`*e;3HBvfdmqTFQ!n;}eSn^M_)Iz5)jC58j3{OE?xY~Z@# zdCUfP$8+(Xk;G^smAiC2xqWkTIJeEzo5;jd+DLLx8yXu;$5X?JjHZuev}87Zi#c9P z!2g=mm&zqZS~uJn7)vFTSYMz!)^*cOUxQDe3sR9BNn`?T;kFf_a3~yTB`E|#Tcj-< zxslS*!UgHU4NRJ7l9u@A`lg`hz5@6XB0+zM47{8umn&-NL_i<0dUYMZb zpVMUKaF{rt>tt_I7+*;8N7y?^9I*EYMF;$bhpn|BNbGljj+dP?M2ut)Yap?%_kf1I zje?y90k8T8qKENCwJCYnH8zB?AlO+T_@(+<01F8_+9fRlAv)ohie@&a%BP55bm8xt zYx%8k4XV>t7r)Is&MBTEs!up|IL7lU7r(o?-!v~&s>h4K$2@G|IPciNRnGQv5I6F} zFpiDt=_!z%^7AI($lt~JRIkst#6Q6KPxF+L{i2KgqnyuRe%PpfZv)vWp5-q1Hz1y7 zG6Ed9G}}Xv5GOmobji;fF8o`dFr4hX?}Go(1-}OJ;$$c3g5LmnapE6$;m_yuz7~4C zo37^9!@U23fFblS$3F-CJT7DRJuV|(y!-ZZ9Ql4OV|SX%cE4Big+M+p36ps($I(8; zi~~R7_le!kzc`M38Hv0#!+K$}$KSzm!lJ z=ikV2j2~53bA=88M={3n!yLEg;h4Y|>+KDWqhItv?QMboc>OC*UIgrviSxz<*l6MgFu4UU9*X3-}FO#xB6+#nAJu-9%_z z2(NG+<$-WIPtiExbPhVn^$4eP(_&0KG{Wf|)M3NvytB=Q)467k4X2~Ww1C&$Ut7D< z`L1|6KA0Ry<{n_7OkyM+N~V%IEuP85A7Gl6#3wRsD4o~zL_C+zB(ea(_=M9K3=JoT z;yHL&onZJBix08G34DwN#jG}{k5^$wP~gVzpU9?$oK+mg>NQtJ+FUhh%$jU2F_B{- z2nHX^tHIT*RUwL(g$A=(o+(rgWpnXNE}u4u@Wh_V<}&#qOaa$Oj-?=fX{N2|U*D

)Lp~V=P6#!j#~Z zTT>ZrbZl72G}w!+UD5H;3@ww`o=;?Ru@yI8mY7Y$#1i1P?NXz{B*5vaOKb__HJ7U| zL*ovuge10UdL}-as4hlreKe~Usw3o#a9Ey9EYkZKKlJ-=o2_*F|pb92pzBuXkiDp6jC5GLiPq-WXnCb#F-MJsZ}pyF-h#^-P$r zZHCP^J~4#aiIuQGSCeh41e2SxiA-!H4(~$lpMbKx66RM6=DTv45z~Cfm9yXBWIwX% zQ+BYb{Zn?ZqV0+~h_pe9tO}`>jJ-b0qN%SV_maUXv+JAJzW)q| zow{=YH@1%-(x2zg5#)m(C+Lzj0Du^OEUMyBE-my`Aya6ozhoc4wHH278;<{c!8XN% z!)IeWmytOZ{6_fL{olo3)X;p%jQtw(>6E|L z7E6QH3G;_0NuTiVLm(K7-TxNu|Ab|x`c3)-d>53R{71R}G!_js^pEe2NT2-sxc@Mc zgcjxx%8G!Yh_Pa$em~c@(AxKQdeE*xrbK!KKV{Vqg-I}*;QA+Q3KTyPe**eW^M9JZ lq&drpIDdRkMfx=VGoa5?L?+E%y!N!S);ofyPubfSqyqfw*L1%C{GC|_FN_ug~Xv%6k3GWp}l zZqIw3^SmGDea}7j>@k0^d7dB;)&z1dDUBFPi2H_;?9)Uau>rGF&i){6k~T`6Qb)U- z`Mw}O{)IltTKlk>-%dtf9LKg;RnatAbX+41pjt$AA@Gj1RM&MFC?s-siI zCgGfv{ZJJ?5eMG{3juNL9a$&@EPhzupwkC-06Hb-g3fx`A|O_95Ta%-*;D)A*P0Ab z|JJ|tpSSG=4$&g8`t!~M>geU-J-dwS-w$N? zE3Ll(BfXwzM=PWxe5j6071dEYQBSyuDjqrJL|@|ZGr})eT;Y9j@D(tEC1v%*eWBG; zD3mQ}Ml0z(5HE%>qogxK@aOCHsUw%cy%pTs$mDJ;qqw3;TP!NisNYOwNjRmB0DV*d zT??7?f$lIS2XKjI7R1GKpKV|bxaSv;a^kDs@|jvrfJ2}zT(t&py>Pn4WZMzAJB+WGab z^ECnMFXiiP7+w8*$*^Qd2Of#^u+cV`o-fSI?0oG36!HbJLT+?bp&(_OF+~Ts6vZG# zow3yRL?WI{D?N_b_Wrhpl;hT(Dq?_}BI$@fs`M+d^z8Y*hc@-~q#(00CFRCORUbpv7m)qrb)H2Bhg4g49dv0T?T1*9D zR~r!q?80)}g32K%bRFQ!843Ciu=v=dYWu!Cj>D>`XAoh+}bEamO2p!^}2$Hwyc z6v*ZLqFJY?Sec6Ox1*t4&=K~Xbn+g7a- z=Q7374vI^V4DA{k9NM{7L-d~|6lZ)kiU%JpZ5xe#itr%;DEj8M~t#em#c|b2$4(B2?gTo`0IdxqoTN z1c&qd&rR@eOz@vL{6;Ec=b-XZ=;;xnA@><@_T6ClWPJ90C>Z$cJ3t1Kkyx~EYq&@0 zhI>U)Nu|P(9RsOYcX+G1b9%PioGYnBBd)YEkR~pe$2*+H4>NLKJQfB+uI@yF=;R)_ z?xEyL#)&HyPb;pL*3MO_bfkM5NhJGXX_XR{-msdC^efW=%nEOMhIyl56IUvoOh>jt z|8PI{;g;Zr1}PZc(A?ba?+ABD4MBgHgzsTg@$+8*|J{R7&3k9J`VAymg$iVm8Z^seDdcBYhMC>nt~-Hw6wSod6*U(1A-%+PKMfxgzVh+x5_=ts6GWT$?v+mAN)=*eL(RJe+UZQ3pqn$K|0%?-g}tK$~6( zXV^JSKbi`?53xzSKk&^51H|yo%Qqh#d~49R^CXb(f(P$kK6v;xT&0h`p$_p*ir=Y9 zO2Y3DwvAvPDPC<<`l+D-Z74yS#NuatKcFZZbC96=QwDwJpTWH#l#BnMO=nEdk1NKH zsbKmn{${|?zZ)LDZK0P#i3dSuakG9Ghw;=G_{$|X!SopPoUWhX?*KS=nCkz;h_q+% oGx%8$%B{bb?w>7`i0j9DA=78;{{k?hZ&Vqg#9BIuahJ>ApJL2uR{#J2 literal 0 HcmV?d00001 diff --git a/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o b/fhi_lib/lib/build/obj/home/ashwini/v23.03/flexran_xran/lib/src/xran_cp_api.o new file mode 100644 index 0000000000000000000000000000000000000000..18b7f07fb04bfdeb5ee3397fa302797f449d2a2d GIT binary patch literal 323736 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
OWKFR!Q*iXPG-NPP(rZFZ+~h=Dp~)OPs*vkpMM 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 z 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

CrU&}1W16hv{#-H3@|%D2?M9bOGp`1Zv1qHw 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 `e!Y3N4!Acw6;6>(= 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